{"version":3,"mappings":"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","names":["m","require$$0","client","resolveFetch","customFetch","_fetch","args","__vitePreload","fetch","FunctionsError","message","name","context","FunctionsFetchError","FunctionsRelayError","FunctionsHttpError","FunctionRegion","__awaiter","this","thisArg","_arguments","P","generator","adopt","value","resolve","reject","fulfilled","step","e","rejected","result","FunctionsClient","url","headers","region","token","functionName","options","_a","method","functionArgs","_headers","body","response","fetchError","isRelayError","responseType","data","error","getGlobal","globalObject","nodeFetch","Headers","Request","Response","PostgrestError_1","PostgrestError","__importDefault","mod","PostgrestBuilder_1","node_fetch_1","require$$1","PostgrestBuilder$1","builder","onfulfilled","onrejected","res","_b","_c","count","status","statusText","countHeader","contentRange","PostgrestBuilder","PostgrestTransformBuilder_1","PostgrestTransformBuilder$1","columns","quoted","cleanedColumns","c","column","ascending","nullsFirst","foreignTable","referencedTable","key","existingOrder","from","to","keyOffset","keyLimit","signal","analyze","verbose","settings","buffers","wal","format","forMediatype","PostgrestTransformBuilder","PostgrestFilterBuilder_1","PostgrestFilterBuilder$1","pattern","patterns","values","cleanedValues","s","range","query","config","type","typePart","configPart","operator","filters","PostgrestFilterBuilder","PostgrestQueryBuilder_1","PostgrestQueryBuilder$1","schema","head","defaultToNull","prefersHeaders","acc","x","uniqueColumns","onConflict","ignoreDuplicates","PostgrestQueryBuilder","version","constants","version_1","PostgrestClient_1","constants_1","require$$2","PostgrestClient$1","PostgrestClient","relation","fn","get","_","cjs","require$$3","require$$4","require$$5","_default","index","DEFAULT_HEADERS","VSN","DEFAULT_TIMEOUT","WS_CLOSE_NORMAL","SOCKET_STATES","CHANNEL_STATES","CHANNEL_EVENTS","TRANSPORTS","CONNECTION_STATE","Serializer","rawPayload","callback","buffer","view","decoder","topicSize","eventSize","offset","topic","event","Timer","timerCalc","PostgresTypes","convertChangeData","record","skipTypes","rec_key","convertColumn","columnName","colType","convertCell","noop","dataType","toArray","toBoolean","toNumber","toJson","toTimestampString","parsedValue","lastIdx","closeBrace","arr","valTrim","val","httpEndpointURL","socketUrl","Push","channel","payload","timeout","h","REALTIME_PRESENCE_LISTEN_EVENTS","RealtimePresence","opts","events","newState","onJoin","onLeave","onSync","diff","currentPresences","newPresences","leftPresences","currentState","state","transformedState","joins","leaves","presences","newPresenceRefs","curPresenceRefs","joinedPresences","joinedPresenceRefs","curPresences","presenceRefsToRemove","obj","func","presence","REALTIME_POSTGRES_CHANGES_LISTEN_EVENT","REALTIME_LISTEN_TYPES","REALTIME_SUBSCRIBE_STATES","RealtimeChannel","params","socket","pushEvent","reason","ref","broadcast","isPrivate","accessTokenPayload","r","postgres_changes","clientPostgresBindings","bindingsLen","newPostgresBindings","i","clientPostgresBinding","table","filter","serverPostgresFilter","endpoint_payload","push","onClose","leavePush","controller","id","_event","_ref","typeLower","close","leave","join","handledPayload","bind","_d","_e","_f","bindId","bindEvent","postgresChanges","commit_timestamp","errors","binding","obj1","obj2","k","records","Transformers.convertChangeData","NATIVE_WEBSOCKET_AVAILABLE","WORKER_SCRIPT","RealtimeClient","endPoint","accessTokenValue","tries","WSWebSocketDummy","WS","code","values_1","kind","msg","chan","tokenToSend","parsed","newRef","dupChannel","rawMessage","objectUrl","prefix","result_url","blob","address","_protocols","StorageError","isStorageError","StorageApiError","StorageUnknownError","originalError","resolveResponse","browser","recursiveToCamel","item","el","newKey","_getErrorMessage","err","handleError","Res","_getRequestParams","parameters","_handleRequest","fetcher","post","put","remove","DEFAULT_SEARCH_OPTIONS","DEFAULT_FILE_OPTIONS","StorageFileApi","bucketId","path","fileBody","fileOptions","metadata","cleanPath","_path","fromPath","toPath","expiresIn","downloadQueryParam","paths","datum","renderPath","transformationQuery","queryString","_queryString","transform","StorageBucketApi","StorageClient","JS_ENV","DEFAULT_GLOBAL_OPTIONS","DEFAULT_DB_OPTIONS","DEFAULT_AUTH_OPTIONS","DEFAULT_REALTIME_OPTIONS","resolveHeadersConstructor","NodeFetchHeaders","fetchWithAuth","supabaseKey","getAccessToken","HeadersConstructor","input","init","accessToken","stripTrailingSlash","applySettingDefaults","defaults","dbOptions","authOptions","realtimeOptions","globalOptions","AUTO_REFRESH_TICK_DURATION_MS","AUTO_REFRESH_TICK_THRESHOLD","EXPIRY_MARGIN_MS","GOTRUE_URL","STORAGE_KEY","API_VERSION_HEADER_NAME","API_VERSIONS","expiresAt","uuid","isBrowser","localStorageWriteTests","supportsLocalStorage","randomKey","parseParametersFromURL","href","looksLikeFetchResponse","maybeResponse","setItemAsync","storage","getItemAsync","removeItemAsync","decodeBase64URL","base64","chr1","chr2","chr3","enc1","enc2","enc3","enc4","Deferred","rej","decodeJWTPayload","base64UrlRegex","parts","base64Url","sleep","time","accept","retryable","isRetryable","attempt","dec2hex","dec","generatePKCEVerifier","array","charSet","charSetLen","verifier","sha256","randomString","encodedData","hash","bytes","base64urlencode","str","generatePKCEChallenge","hashed","getCodeChallengeAndMethod","storageKey","isPasswordRecovery","codeVerifier","storedCodeVerifier","codeChallenge","API_VERSION_REGEX","parseResponseAPIVersion","apiVersion","AuthError","isAuthError","AuthApiError","isAuthApiError","AuthUnknownError","CustomAuthError","AuthSessionMissingError","isAuthSessionMissingError","AuthInvalidTokenResponseError","AuthInvalidCredentialsError","AuthImplicitGrantRedirectError","details","isAuthImplicitGrantRedirectError","AuthPKCEGrantCodeExchangeError","AuthRetryableFetchError","isAuthRetryableFetchError","AuthWeakPasswordError","reasons","__rest","p","NETWORK_ERROR_CODES","errorCode","responseAPIVersion","a","_request","qs","requestParams","_sessionResponse","session","hasSession","user","_sessionResponsePassword","_userResponse","_ssoResponse","_generateLinkResponse","action_link","email_otp","hashed_token","redirect_to","verification_type","rest","properties","_noResolveJsonResponse","GoTrueAdminApi","jwt","scope","email","attributes","_g","pagination","users","total","links","link","page","rel","uid","shouldSoftDelete","factors","localStorageAdapter","memoryLocalStorageAdapter","store","polyfillGlobalThis","internals","LockAcquireTimeoutError","NavigatorLockAcquireTimeoutError","navigatorLock","acquireTimeout","abortController","lock","DEFAULT_OPTIONS","lockNoOp","GoTrueClient","callbackUrlType","redirectType","credentials","password","codeChallengeMethod","phone","authCode","storageItem","provider","access_token","nonce","redirectTo","captchaToken","sessionError","endpoint","last","waitOn","currentSession","maybeSession","hasExpired","suppressWarning","target","prop","receiver","sessionData","userError","timeNow","refreshedSession","provider_token","provider_refresh_token","refresh_token","expires_in","expires_at","token_type","actuallyExpiresIn","issuedAt","currentStorageContent","subscription","identity","refreshToken","debugName","startedAt","nextBackOffInterval","expiresWithMargin","promises","ticker","now","expiresInTicks","calledFromInitialize","methodName","urlParams","flowParams","challengeData","challengeError","totp","factor","currentLevel","nextLevel","currentAuthenticationMethods","AuthClient","SupabaseAuthClient","SupabaseClient","supabaseUrl","_supabaseUrl","defaultStorageKey","DEFAULTS","SupabaseStorageClient","autoRefreshToken","persistSession","detectSessionInUrl","flowType","debug","authHeaders","source","createClient","supabase","propertyService","userId","propertyData","updates","TOAST_LIMIT","generateId","useToast","setState","useState","useEffect","timeouts","toast","props","update","t","dismiss","AuthContext","createContext","useAuth","useContext","AuthProvider","children","setUser","loading","setLoading","firstName","lastName","newPassword","PropertyContext","PropertyProvider","setProperties","analyses","setAnalyses","fetchProperties","fetchAnalyses","addProperty","prev","updateProperty","deleteProperty","saveAnalysis","analysisData","jsx","CommunityContext","CommunityProvider","discussions","setDiscussions","messages","setMessages","notifications","setNotifications","UserContext","UserProvider","savedAnalyses","setSavedAnalyses","favoriteProperties","setFavoriteProperties","preferences","setPreferences","fetchUserData","favorites","notifs","prefs","analysis","property","newPreferences","notificationId","n","f","o","clsx","twJoin","argument","resolvedValue","string","toValue","mix","CLASS_PART_SEPARATOR","createClassUtils","classMap","createClassMap","conflictingClassGroups","_config$conflictingCl","conflictingClassGroupModifiers","getClassGroupId","className","classParts","getGroupRecursive","getGroupIdForArbitraryProperty","getConflictingClassGroupIds","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","classGroupFromNextClassPart","classRest","validator","arbitraryPropertyRegex","arbitraryPropertyClassName","theme","prefixedClassGroupEntries","getPrefixedClassGroupEntries","_ref2","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","_ref3","currentClassPartObject","pathPart","classGroupEntries","_ref4","prefixedClassGroup","_ref5","createLruCache","maxCacheSize","cacheSize","cache","previousCache","IMPORTANT_MODIFIER","createSplitModifiers","separator","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","modifiers","bracketDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","isArbitraryVariant","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","splitModifiers","classGroupsInConflict","originalClassName","_splitModifiers","variantModifier","modifierId","classId","group","createTailwindMerge","_len","createConfig","_key","cacheGet","cacheSet","functionToCall","initTailwindMerge","firstCreateConfig","restCreateConfig","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","tshirtUnitRegex","lengthUnitRegex","shadowRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","isArbitrarySize","isNever","isArbitraryPosition","isArbitraryUrl","isUrl","isArbitraryNumber","isPercent","isInteger","isIntegerOnly","isArbitraryValue","isAny","isTshirtSize","isArbitraryShadow","isShadow","label","testValue","getDefaultConfig","colors","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","getSpacingWithArbitrary","getLengthWithEmpty","getNumberWithAutoAndArbitrary","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumber","getNumberAndArbitrary","twMerge","cn","inputs","falsyToString","cx","cva","base","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","param","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","defaultAttributes","toKebabCase","createLucideIcon","iconName","iconNode","Component","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","createElement","tag","attrs","AlertTriangle","ArrowLeftRight","ArrowLeft","ArrowRight","BarChart3","Bell","Brain","Building","Calendar","CheckCircle","Check","ChevronDown","Chrome","CreditCard","DollarSign","Download","Gift","HelpCircle","Home","Image","Loader2","Lock","LogOut","Mail","Map","MessageSquare","MoreHorizontal","Paperclip","Percent","Phone","PieChart","Plus","RefreshCw","Search","Send","Settings","Share2","Shield","Smile","Star","Trash2","TrendingUp","User","Users","Video","X","ToastProvider","ToastPrimitives.Provider","ToastViewport","React","ToastPrimitives.Viewport","toastVariants","Toast","ToastPrimitives.Root","ToastAction","ToastPrimitives.Action","ToastClose","ToastPrimitives.Close","ToastTitle","ToastPrimitives.Title","ToastDescription","ToastPrimitives.Description","Toaster","toasts","title","description","action","jsxs","buttonVariants","Button","asChild","Comp","Slot","Fragment","Dialog","DialogPrimitive.Root","DialogPortal","DialogPrimitive.Portal","DialogOverlay","DialogPrimitive.Overlay","DialogContent","DialogPrimitive.Content","DialogPrimitive.Close","DialogHeader","DialogTitle","DialogPrimitive.Title","DialogDescription","DialogPrimitive.Description","Input","NAME","Label","React.forwardRef","forwardedRef","Primitive","Root","LabelPrimitive.Root","AuthDialog","isOpen","onSuccess","isSignUp","setIsSignUp","isLoading","setIsLoading","signIn","signUp","signInWithGoogle","formData","setFormData","setErrors","validateForm","newErrors","handleSubmit","handleGoogleSignIn","UserNav","navigate","useNavigate","signOut","isDropdownOpen","setIsDropdownOpen","showAuthDialog","setShowAuthDialog","handleLogout","handleNavigation","handleAuthSuccess","motion","AnimatePresence","Navbar","Link","Hero","Features","features","feature","Icon","Testimonials","testimonials","testimonial","V3_URL","V3_URL_REGEX","EXISTING_SCRIPT_MESSAGE","findScript","scripts","script","injectScript","headOrBody","registerWrapper","stripe","startTime","stripePromise","onErrorListener","onLoadListener","onError","onLoad","loadScript","_script$parentNode","initStripe","maybeStripe","stripePromise$1","loadCalled","getStripePromise","loadStripe","STRIPE_CONFIG","createCheckoutSession","priceId","plans","Pricing","isAuthOpen","setIsAuthOpen","selectedPlan","setSelectedPlan","isProcessing","setIsProcessing","handlePlanSelect","plan","Newsletter","setEmail","DemoRequest","ReferralSystem","referralCode","setReferralCode","copyReferralLink","faqs","containerVariants","itemVariants","FAQ","faq","ContactForm","handleChange","LandingPage","ROICalculator","results","setResults","handleInputChange","calculateROI","loanAmount","monthlyRate","numberOfPayments","monthlyMortgage","monthlyTax","monthlyInsurance","monthlyMaintenance","monthlyVacancy","monthlyManagement","totalMonthlyExpenses","monthlyCashFlow","annualCashFlow","downPayment","closingCosts","totalInvestment","cashOnCashROI","futureValue","totalAppreciation","requiredVars","missingVars","varName","PerformanceMonitor","measurements","latestMeasurement","duration","threshold","performanceMonitor","CacheManager","oldestKey","b","cacheManager","ZillowAPI","location","cacheKey","cachedData","processedData","rawData","prices","sqftPrices","PropertySearch","onPropertySelect","searchTerm","setSearchTerm","showManualInput","setShowManualInput","handleSearch","formattedResults","handleKeyPress","AnalysisResults","calculateEstimatedRent","baseRent","adjustmentFactor","calculateFutureValue","annualAppreciation","calculatePropertyTax","PROGRESS_NAME","DEFAULT_MAX","createProgressContext","createProgressScope","createContextScope","ProgressProvider","useProgressContext","Progress","__scopeProgress","valueProp","maxProp","getValueLabel","defaultGetValueLabel","progressProps","isValidMaxNumber","getInvalidMaxError","max","isValidValueNumber","getInvalidValueError","valueLabel","getProgressState","INDICATOR_NAME","ProgressIndicator","indicatorProps","maxValue","propValue","componentName","Indicator","ProgressPrimitive.Root","ProgressPrimitive.Indicator","RiskAssessment","marketTrends","setMarketTrends","riskScore","setRiskScore","analyzeRisk","trends","score","calculateRiskScore","scores","calculateMarketRisk","calculateFinancialRisk","calculatePropertyRisk","calculateLocationRisk","PropertyAnalysis","AnalysisTool","LoadingSpinner","Dashboard","setSubscription","subData","propData","sum","chatGPT","marketData","prompt","insights","round","v","lim","l","p2b","n2b","b2n","n2p","map$1","hex","h1","h2","eq","isShort","hexParse","len","ret","alpha","hexString","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","hueValue","g","d","rgb2hsl","min","calln","hsl2rgb","hwb2rgb","hsv2rgb","hue","hueParse","p1","p2","rotate","deg","hslString","map","names$1","unpack","unpacked","keys","tkeys","j","ok","nk","names","nameParse","RGB_RE","rgbParse","rgbString","interpolate","rgb1","rgb2","modHSL","ratio","tmp","clone","proto","fromObject","functionParse","Color","weight","c1","c2","w2","w1","isNullOrUndef","isArray","isObject","isNumberFinite","finiteOrDefault","defaultValue","valueOrDefault","toPercentage","dimension","toDimension","each","loopable","reverse","_elementsEqual","a0","a1","ilen","v0","v1","klen","isValidKey","_merger","tval","sval","merge","sources","merger","current","mergeIf","_mergerIf","keyResolvers","_splitKey","part","_getKeyResolver","resolveObjectKey","_capitalize","defined","isFunction","setsEqual","_isClickEvent","PI","TAU","PITAU","INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","y","epsilon","niceNum","roundedRange","niceRange","fraction","_factorize","sqrt","isNonPrimitive","almostWhole","rounded","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","angle","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","start","end","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_int16Range","_isBetween","_lookup","cmp","hi","lo","mid","_lookupByKey","ti","_rlookupByKey","_filterBetween","arrayEvents","listenArrayEvents","listener","object","unlistenArrayEvents","stub","listeners","_arrayUnique","items","set","requestAnimFrame","throttled","argsToUse","ticking","debounce","delay","_toLeftRightCenter","align","_alignStartEnd","_textX","left","right","rtl","_getStartAndCountOfVisiblePoints","meta","points","animationsDisabled","pointCount","iScale","vScale","_parsed","spanGaps","axis","minDefined","maxDefined","distanceToDefinedLo","point","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","changed","atEdge","elasticIn","elasticOut","effects","isPatternOrGradient","getHoverColor","numbers","applyAnimationsDefaults","applyLayoutsDefaults","intlCache","getNumberFormat","locale","formatter","formatNumber","num","formatters","tickValue","ticks","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","remain","Ticks","applyScaleDefaults","_ctx","overrides","descriptors","getScope$1","node","root","Defaults","_descriptors","_appliers","ctx","targetScope","targetName","scopeObject","targetScopeObject","privateName","local","appliers","apply","toFontString","font","_measureText","gc","longest","textWidth","_longestText","arrayOfThings","jlen","thing","nestedThing","gcLen","_alignPixel","chart","pixel","width","devicePixelRatio","halfWidth","clearCanvas","canvas","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","style","rotation","radius","rad","_isPointInArea","area","clipArea","unclipArea","_steppedLineTo","previous","flip","mode","midpoint","_bezierCurveTo","setRenderOpts","decorateText","line","metrics","top","bottom","yDecoration","drawBackdrop","oldColor","renderText","text","lines","stroke","addRoundedRectPath","rect","LINE_HEIGHT","FONT_STYLE","toLineHeight","matches","numberOrZero","_readValueToProps","objProps","read","toTRBL","toTRBLCorners","toPadding","toFont","fallback","info","cacheable","_addGrace","minmax","grace","beginAtZero","change","keepZero","add","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","_cached","_resolveWithPrefixes","getKeysFromAllScopes","_attachContext","proxy","subProxy","descriptorDefaults","_resolveWithContext","_scriptable","_indexable","_allKeys","readKey","needsSubResolver","_proxy","_context","_subProxy","_resolveScriptable","_resolveArray","getValue","_stack","createSubResolver","isIndexable","resolver","resolveFallback","getScope","parent","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","EPSILON","getPoint","getValueAxis","indexAxis","splineCurve","firstPoint","middlePoint","afterPoint","next","d01","d12","s01","s12","fa","fb","monotoneAdjust","deltaK","mK","pointsLen","alphaK","betaK","tauK","squaredMagnitude","pointCurrent","pointAfter","monotoneCompute","valueAxis","pointBefore","iPixel","vPixel","splineCurveMonotone","slopeDelta","capControlPoint","pt","capBezierPoints","inArea","inAreaPrev","inAreaNext","_updateBezierControlPoints","loop","controlPoints","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","element","getStyle","positions","getPositionedStyle","styles","suffix","pos","useOffsetPos","getCanvasPosition","touches","offsetX","offsetY","box","getRelativePosition","currentDevicePixelRatio","borderBox","paddings","borders","height","getContainerSize","maxWidth","maxHeight","container","containerStyle","containerBorder","containerPadding","round1","getMaximumSize","bbWidth","bbHeight","aspectRatio","margins","containerSize","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","supportsEventListenerOptions","passiveSupported","readUsedSize","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRightToLeftAdapter","rectX","itemWidth","getLeftToRightAdapter","_itemWidth","getRtlAdapter","overrideTextDirection","direction","original","restoreTextDirection","propertyFn","normalizeSegment","getSegment","segment","bounds","startBound","endBound","between","normalize","_boundSegment","compare","inside","subStart","prevValue","startIsBefore","endIsBefore","shouldStart","shouldStop","_boundSegments","segments","sub","findStartAndEnd","solidSegments","cur","_computeSegments","segmentOptions","splitByStyles","completeLoop","doSplitByStyles","chartContext","baseStyle","readStyle","datasetIndex","prevStyle","addStyle","st","dir","styleChanged","replacer","Animator","anims","date","callbacks","numSteps","remaining","draw","charts","cb","animator","transparent","interpolators","c0","Animation","cfg","currentValue","elapsed","resolved","Animations","animationOptions","animatedProps","option","newOptions","resolveTargetOptions","animations","awaitAll","running","animation","anim","scaleClip","allowedOverflow","defaultClip","toClip","getSortedDatasetIndices","filterVisible","metasets","applyStack","stack","dsIndex","singleMode","otherValue","found","convertObjectDataToArray","iAxisKey","vAxisKey","adata","isStacked","stacked","getStackKey","indexScale","valueScale","getUserBounds","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","updateStacks","iAxis","vAxis","itemStacks","visualValues","getFirstScaleId","scales","createDatasetContext","createDataContext","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","createStack","canStack","DatasetController","dataset","chooseId","xid","yid","rid","iid","vid","scaleID","_data","resetNewElements","stackChanged","oldStacked","scopeKeys","_stacked","sorted","isNotInOrderComparedToPrev","labels","singleScale","xAxisKey","yAxisKey","otherScale","otherMin","otherMax","_skip","elements","active","drawActiveElementsOnTop","elementType","sharing","transition","sharedOptions","firstOpts","previouslySharedOptions","includeOptions","arg1","arg2","numMeta","numData","move","removed","newCount","__publicField","getRatioAndOffset","circumference","cutout","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","DoughnutController","getter","chartArea","arcs","maxSize","chartWeight","maxRadius","outerRadius","innerRadius","radiusLength","reset","animationOpts","centerX","centerY","animateScale","arc","metaData","ringWeightOffset","pointStyle","legendItem","legend","LineController","_dataset","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","border","lastPoint","PieController","abstract","DateAdapterBase","members","adapters","binarySearch","metaset","intersect","_sorted","lookupMethod","evaluateInteractionItems","position","handler","getDistanceMetricForAxis","useX","useY","deltaX","deltaY","getIntersectItems","useFinalPosition","includeInvisible","getNearestRadialItems","evaluationFunc","getNearestCartesianItems","distanceMetric","minDistance","inRange","center","distance","getNearestItems","getAxisItems","rangeMethod","intersectsItem","Interaction","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","wrapBoxes","boxes","layoutBoxes","stackWeight","buildStacks","layouts","wrap","setLayoutDims","vBoxMaxWidth","hBoxMaxHeight","layout","fullSize","buildLayoutBoxes","centerHorizontal","centerVertical","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","newWidth","newHeight","widthChanged","heightChanged","handleMaxPadding","updatePos","getMargins","horizontal","marginForPositions","fitBoxes","refitBoxes","refit","same","other","setBoxDims","placeBoxes","userPadding","layoutItem","minPadding","availableWidth","availableHeight","verticalBoxes","horizontalBoxes","visibleVerticalBoxCount","BasePlatform","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","isNullOrEmpty","initCanvas","renderHeight","renderWidth","displayWidth","displayHeight","eventListenerOptions","addListener","removeListener","fromNativeEvent","nodeListContains","nodeList","createAttachObserver","observer","entries","trigger","entry","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","resize","listenDevicePixelRatioChanges","unlistenDevicePixelRatioChanges","createResizeObserver","releaseObserver","createProxyAndListen","DomPlatform","initial","proxies","_detectPlatform","Element","final","autoSkip","tickOpts","determinedMaxTicks","determineMaxTicks","ticksLimit","majorIndices","getMajorIndices","numMajorIndices","first","newTicks","skipMajors","calculateSpacing","avgMajorSpacing","skip","tickLength","maxScale","maxChart","evenMajorSpacing","getEvenSpacing","majorStart","majorEnd","length","reverseAlign","offsetFromEdge","edge","getTicksLimit","ticksLength","maxTicksLimit","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","garbageCollect","caches","getTickMarkLength","getTitleHeight","createScaleContext","createTickContext","tick","titleAlign","titleArgs","titleX","titleY","positionAxisID","Scale","raw","_userMin","_userMax","_suggestedMin","_suggestedMax","metas","sampleSize","samplingEnabled","reversePixels","startPixel","endPixel","numTicks","minRotation","maxRotation","labelRotation","tickWidth","maxLabelDiagonal","labelSizes","maxLabelWidth","maxLabelHeight","minSize","titleOpts","gridOpts","display","isHorizontal","titleHeight","widest","highest","tickPadding","angleRadians","cos","sin","labelHeight","labelWidth","isRotated","labelsBelowTicks","offsetLeft","offsetRight","paddingLeft","paddingRight","paddingTop","paddingBottom","widths","heights","widestLabelSize","highestLabelSize","tickFont","fontString","lineHeight","nestedLabel","valueAt","idx","decimal","optionTicks","rot","grid","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","limit","optsAtIndex","optsAtIndexBorder","lineWidth","lineColor","borderDash","borderDashOffset","tickColor","tickBorderDash","tickBorderDashOffset","crossAlign","mirror","tickAndPadding","hTickAndPadding","textAlign","lineCount","textOffset","textBaseline","halfCount","strokeColor","tickTextAlign","backdrop","labelPadding","backgroundColor","drawLine","lastLineWidth","renderTextOptions","tz","gz","bz","axisID","fontSize","TypedRegistry","override","parentScope","isIChartComponent","registerDefaults","itemDefaults","routeDefaults","routes","propertyParts","sourceName","sourceScope","Registry","typedRegistry","arg","reg","itemReg","registry","component","camelMethod","PluginService","hook","descriptor","plugin","all","plugins","allPlugins","createDescriptors","previousDescriptors","localIds","getOpts","pluginOpts","getIndexAxis","datasetDefaults","getAxisFromDefaultScaleID","getDefaultScaleIDFromAxis","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","getAxisFromDataset","retrieveAxisFromDatasets","boundDs","mergeScaleConfig","chartDefaults","configScales","chartIndexAxis","scaleConf","defaultId","defaultScaleOptions","defaultID","initOptions","initData","initConfig","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","datasetType","mainScope","resetCache","_scopeCache","keyLists","subPrefixes","getResolver","needContext","subResolver","resolverCache","hasFunction","isScriptable","scriptable","indexable","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onAnimationProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","determineLastEvent","lastEvent","inChartArea","isClick","getSizeForArea","field","getDatasetArea","Chart$1","invalidatePlugins","userConfig","initialCanvas","existingChart","maintainAspectRatio","_aspectRatio","newSize","newRatio","scalesOptions","axisOptions","scaleOpts","updated","isRadial","scaleType","scaleClass","hasUpdated","datasets","newControllers","ControllerClass","datasetElementType","dataElementType","animsDisabled","_active","_lastEvent","existingEvents","newEvents","_hiddenIndices","changes","_dataChanges","datasetCount","makeSet","changeSet","noArea","layers","clip","useClip","visible","dataIndex","platform","_add","_remove","detached","attached","enabled","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","eventFilter","Chart","clipArc","pixelMargin","angleMargin","toRadiusCorners","parseBorderRadius$1","angleDelta","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","rThetaToXY","theta","pathArc","circular","innerR","spacingOffset","noSpacingInnerRadius","noSpacingOuterRadius","avNogSpacingRadius","adjustedAngle","beta","angleOffset","outerStart","outerEnd","innerStart","innerEnd","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","drawArc","fullCircles","drawBorder","borderJoinStyle","inner","ArcElement","chartX","chartY","rAdjust","_circumference","nonZeroBetween","betweenAngles","withinRadius","halfAngle","halfRadius","fix","radiusOffset","setStyle","lineTo","getLineMethod","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","fastPathSegment","avgX","countX","prevX","lastY","pointIndex","drawX","truncX","_getSegmentMethod","_getInterpolationMethod","strokePathWithCache","strokePathDirect","segmentMethod","usePath2D","LineElement","_interpolate","interpolated","inRange$1","PointElement","mouseX","mouseY","getBarBounds","bar","half","skipOrLimit","parseBorderWidth","maxW","maxH","parseBorderRadius","enableBorderRadius","maxR","enableBorder","boundingRects","skipX","skipY","hasRadius","addNormalRectPath","inflateRect","amount","refRect","BarElement","inflateAmount","outer","addRectPath","getBoxSize","labelOpts","boxHeight","boxWidth","itemsEqual","Legend","legendItems","labelFont","itemHeight","hitboxes","lineWidths","totalHeight","row","_itemHeight","columnSizes","heightLimit","totalWidth","currentColWidth","currentColHeight","col","calculateItemSize","rtlHelper","hitbox","defaultColor","halfFontSize","cursor","drawLegendBox","drawOptions","yBoxTop","xBoxLeft","fillText","realX","fontLineHeight","calculateLegendItemHeight","titleFont","titlePadding","topPaddingPlusHalfFontSize","hitBox","lh","isListened","hoveredItem","sameItem","calculateItemWidth","calculateItemHeight","legendItemText","plugin_legend","_args","ci","usePointStyle","useBorderRadius","Title","textSize","fontOpts","createTitle","plugin_title","titleBlock","positioners","xSet","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","getTooltipSize","tooltip","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","bodyLineHeight","widthPadding","maxLineWidth","determineYAlign","doesNotFitWithAlign","xAlign","caret","determineXAlign","yAlign","chartWidth","determineAlignment","alignX","alignY","paddingAndSize","getBackgroundPoint","alignment","caretSize","caretPadding","topLeft","topRight","bottomLeft","bottomRight","getAlignedX","getBeforeAfterBodyLines","createTooltipContext","tooltipItems","overrideCallbacks","defaultCallbacks","labelCount","tooltipItem","invokeCallbackWithFallback","Tooltip","beforeTitle","afterTitle","bodyItems","scoped","beforeFooter","afterFooter","labelColors","labelPointStyles","labelTextColors","positionAndSize","backgroundPoint","tooltipPoint","caretPosition","ptX","ptY","x3","y3","titleSpacing","labelColor","labelPointStyle","colorX","rtlColorX","yOffSet","colorY","outerX","innerX","bodySpacing","bodyAlign","displayColors","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","tooltipSize","animX","animY","hasTooltipContent","positionChanged","caretX","caretY","plugin_tooltip","addIfString","addedLabels","findOrAddLabel","_getLabelForValue","CategoryScale","added","generateTicks$1","generationOptions","dataRange","precision","maxTicks","maxDigits","includeBounds","unit","maxSpaces","rmin","rmax","countDefined","minSpacing","niceMin","niceMax","numSpaces","decimalPlaces","relativeLabelSize","LinearScaleBase","setMin","setMax","minSign","maxSign","stepSize","numericGeneratorOptions","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","startExp","generateTicks","minExp","exp","significand","lastTick","LogarithmicScale","getTickBackdropHeight","measureLabelSize","determineLimits","fitWithPointLabels","orig","limits","valueCount","pointLabelOpts","additionalAngle","pointPosition","plFont","hLimits","vLimits","updateLimits","buildPointLabelItems","createPointLabelItem","itemOpts","outerDistance","extra","pointLabelPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","isNotOverlapped","centerPointLabels","drawPointLabelBox","backdropColor","backdropLeft","backdropTop","backdropWidth","backdropHeight","drawPointLabels","pointLabels","pathRadiusLine","drawRadiusLine","gridLineOpts","createPointLabelContext","RadialLinearScale","leftMovement","rightMovement","topMovement","bottomMovement","angleMultiplier","scalingFactor","scaledDistance","pointLabel","distanceFromCenter","angleLines","INTERVALS","UNITS","sorter","parse","adapter","parser","isoWeekday","determineUnitForAutoTicks","minUnit","capacity","interval","determineUnitForFormatting","determineMajorUnit","addTick","timestamps","timestamp","setMajorTicks","majorUnit","major","ticksFromTimestamps","TimeScale","_applyBounds","timeOpts","minor","weekday","hasWeekday","formats","fmt","minorFormat","majorFormat","offsets","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","displayFormats","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","TimeSeriesScale","curr","defaultDatasetIdKey","reforwardRef","setOptions","nextOptions","setLabels","currentData","nextLabels","setDatasets","nextDatasets","datasetIdKey","addedDatasets","nextDataset","currentDataset","cloneData","nextData","ChartComponent","redraw","fallbackContent","updateMode","canvasProps","canvasRef","useRef","chartRef","renderChart","destroyChart","createTypedChart","registerables","Line","Pie","ChartJS","MarketAnalysis","setLocation","setMarketData","aiInsights","setAiInsights","analyzeMarket","zillowData","_j","_i","_h","_m","_l","_k","_p","_o","_n","_q","_r","_s","_u","_t","_v","_x","_w","_z","_y","_A","PropertyComparison","aiAnalysis","setAiAnalysis","formatAddress","streetAddress","city","zipcode","handlePropertySelect","propertyKey","propertyDetails","enhancedProperty","comparison","calculateMetrics","price","sqft","handleDownloadReport","handleShareComparison","clearComparison","_B","_D","_C","_F","_E","_H","_G","_K","_I","_J","_N","_L","_M","_Q","_O","_P","_S","_R","_U","_T","_W","_V","CommunityHub","activeTab","setActiveTab","mockDiscussions","mockExperts","tab","discussion","expert","ExpertQA","activeCategory","setActiveCategory","categories","category","DirectMessaging","selectedChat","setSelectedChat","setMessage","mockChats","mockMessages","handleSendMessage","chat","ImageIcon","SettingsPage","tabs","renderSubscriptionContent","EmailService","PaymentSuccess","useLocation","sessionId","verifyPayment","ProtectedRoute","requiresPro","Navigate","App","Router","Routes","Route","ReactDOM"],"sources":["../../node_modules/react-dom/client.js","../../node_modules/@supabase/functions-js/dist/module/helper.js","../../node_modules/@supabase/functions-js/dist/module/types.js","../../node_modules/@supabase/functions-js/dist/module/FunctionsClient.js","../../node_modules/@supabase/node-fetch/browser.js","../../node_modules/@supabase/postgrest-js/dist/cjs/PostgrestError.js","../../node_modules/@supabase/postgrest-js/dist/cjs/PostgrestBuilder.js","../../node_modules/@supabase/postgrest-js/dist/cjs/PostgrestTransformBuilder.js","../../node_modules/@supabase/postgrest-js/dist/cjs/PostgrestFilterBuilder.js","../../node_modules/@supabase/postgrest-js/dist/cjs/PostgrestQueryBuilder.js","../../node_modules/@supabase/postgrest-js/dist/cjs/version.js","../../node_modules/@supabase/postgrest-js/dist/cjs/constants.js","../../node_modules/@supabase/postgrest-js/dist/cjs/PostgrestClient.js","../../node_modules/@supabase/postgrest-js/dist/cjs/index.js","../../node_modules/@supabase/postgrest-js/dist/esm/wrapper.mjs","../../node_modules/@supabase/realtime-js/dist/module/lib/version.js","../../node_modules/@supabase/realtime-js/dist/module/lib/constants.js","../../node_modules/@supabase/realtime-js/dist/module/lib/serializer.js","../../node_modules/@supabase/realtime-js/dist/module/lib/timer.js","../../node_modules/@supabase/realtime-js/dist/module/lib/transformers.js","../../node_modules/@supabase/realtime-js/dist/module/lib/push.js","../../node_modules/@supabase/realtime-js/dist/module/RealtimePresence.js","../../node_modules/@supabase/realtime-js/dist/module/RealtimeChannel.js","../../node_modules/@supabase/realtime-js/dist/module/RealtimeClient.js","../../node_modules/@supabase/storage-js/dist/module/lib/errors.js","../../node_modules/@supabase/storage-js/dist/module/lib/helpers.js","../../node_modules/@supabase/storage-js/dist/module/lib/fetch.js","../../node_modules/@supabase/storage-js/dist/module/packages/StorageFileApi.js","../../node_modules/@supabase/storage-js/dist/module/lib/version.js","../../node_modules/@supabase/storage-js/dist/module/lib/constants.js","../../node_modules/@supabase/storage-js/dist/module/packages/StorageBucketApi.js","../../node_modules/@supabase/storage-js/dist/module/StorageClient.js","../../node_modules/@supabase/supabase-js/dist/module/lib/version.js","../../node_modules/@supabase/supabase-js/dist/module/lib/constants.js","../../node_modules/@supabase/supabase-js/dist/module/lib/fetch.js","../../node_modules/@supabase/supabase-js/dist/module/lib/helpers.js","../../node_modules/@supabase/auth-js/dist/module/lib/version.js","../../node_modules/@supabase/auth-js/dist/module/lib/constants.js","../../node_modules/@supabase/auth-js/dist/module/lib/helpers.js","../../node_modules/@supabase/auth-js/dist/module/lib/errors.js","../../node_modules/@supabase/auth-js/dist/module/lib/fetch.js","../../node_modules/@supabase/auth-js/dist/module/GoTrueAdminApi.js","../../node_modules/@supabase/auth-js/dist/module/lib/local-storage.js","../../node_modules/@supabase/auth-js/dist/module/lib/polyfills.js","../../node_modules/@supabase/auth-js/dist/module/lib/locks.js","../../node_modules/@supabase/auth-js/dist/module/GoTrueClient.js","../../node_modules/@supabase/auth-js/dist/module/AuthClient.js","../../node_modules/@supabase/supabase-js/dist/module/lib/SupabaseAuthClient.js","../../node_modules/@supabase/supabase-js/dist/module/SupabaseClient.js","../../node_modules/@supabase/supabase-js/dist/module/index.js","../../src/lib/supabase.js","../../src/components/ui/use-toast.js","../../src/contexts/AuthContext.jsx","../../src/contexts/PropertyContext.jsx","../../src/contexts/CommunityContext.jsx","../../src/contexts/UserContext.jsx","../../node_modules/clsx/dist/clsx.mjs","../../node_modules/tailwind-merge/dist/lib/tw-join.mjs","../../node_modules/tailwind-merge/dist/lib/class-utils.mjs","../../node_modules/tailwind-merge/dist/lib/lru-cache.mjs","../../node_modules/tailwind-merge/dist/lib/modifier-utils.mjs","../../node_modules/tailwind-merge/dist/lib/config-utils.mjs","../../node_modules/tailwind-merge/dist/lib/merge-classlist.mjs","../../node_modules/tailwind-merge/dist/lib/create-tailwind-merge.mjs","../../node_modules/tailwind-merge/dist/lib/from-theme.mjs","../../node_modules/tailwind-merge/dist/lib/validators.mjs","../../node_modules/tailwind-merge/dist/lib/default-config.mjs","../../node_modules/tailwind-merge/dist/lib/tw-merge.mjs","../../src/lib/utils.js","../../node_modules/class-variance-authority/dist/index.mjs","../../node_modules/lucide-react/dist/esm/defaultAttributes.js","../../node_modules/lucide-react/dist/esm/createLucideIcon.js","../../node_modules/lucide-react/dist/esm/icons/alert-triangle.js","../../node_modules/lucide-react/dist/esm/icons/arrow-left-right.js","../../node_modules/lucide-react/dist/esm/icons/arrow-left.js","../../node_modules/lucide-react/dist/esm/icons/arrow-right.js","../../node_modules/lucide-react/dist/esm/icons/bar-chart-3.js","../../node_modules/lucide-react/dist/esm/icons/bell.js","../../node_modules/lucide-react/dist/esm/icons/brain.js","../../node_modules/lucide-react/dist/esm/icons/building.js","../../node_modules/lucide-react/dist/esm/icons/calendar.js","../../node_modules/lucide-react/dist/esm/icons/check-circle.js","../../node_modules/lucide-react/dist/esm/icons/check.js","../../node_modules/lucide-react/dist/esm/icons/chevron-down.js","../../node_modules/lucide-react/dist/esm/icons/chrome.js","../../node_modules/lucide-react/dist/esm/icons/credit-card.js","../../node_modules/lucide-react/dist/esm/icons/dollar-sign.js","../../node_modules/lucide-react/dist/esm/icons/download.js","../../node_modules/lucide-react/dist/esm/icons/gift.js","../../node_modules/lucide-react/dist/esm/icons/help-circle.js","../../node_modules/lucide-react/dist/esm/icons/home.js","../../node_modules/lucide-react/dist/esm/icons/image.js","../../node_modules/lucide-react/dist/esm/icons/loader-2.js","../../node_modules/lucide-react/dist/esm/icons/lock.js","../../node_modules/lucide-react/dist/esm/icons/log-out.js","../../node_modules/lucide-react/dist/esm/icons/mail.js","../../node_modules/lucide-react/dist/esm/icons/map.js","../../node_modules/lucide-react/dist/esm/icons/message-square.js","../../node_modules/lucide-react/dist/esm/icons/more-horizontal.js","../../node_modules/lucide-react/dist/esm/icons/paperclip.js","../../node_modules/lucide-react/dist/esm/icons/percent.js","../../node_modules/lucide-react/dist/esm/icons/phone.js","../../node_modules/lucide-react/dist/esm/icons/pie-chart.js","../../node_modules/lucide-react/dist/esm/icons/plus.js","../../node_modules/lucide-react/dist/esm/icons/refresh-cw.js","../../node_modules/lucide-react/dist/esm/icons/search.js","../../node_modules/lucide-react/dist/esm/icons/send.js","../../node_modules/lucide-react/dist/esm/icons/settings.js","../../node_modules/lucide-react/dist/esm/icons/share-2.js","../../node_modules/lucide-react/dist/esm/icons/shield.js","../../node_modules/lucide-react/dist/esm/icons/smile.js","../../node_modules/lucide-react/dist/esm/icons/star.js","../../node_modules/lucide-react/dist/esm/icons/trash-2.js","../../node_modules/lucide-react/dist/esm/icons/trending-up.js","../../node_modules/lucide-react/dist/esm/icons/user.js","../../node_modules/lucide-react/dist/esm/icons/users.js","../../node_modules/lucide-react/dist/esm/icons/video.js","../../node_modules/lucide-react/dist/esm/icons/x.js","../../src/components/ui/toast.jsx","../../src/components/ui/toaster.jsx","../../src/components/ui/button.jsx","../../src/components/ui/dialog.jsx","../../src/components/ui/input.jsx","../../node_modules/@radix-ui/react-label/dist/index.mjs","../../src/components/ui/label.jsx","../../src/components/AuthDialog.jsx","../../src/components/UserNav.jsx","../../src/components/Navbar.jsx","../../src/components/Hero.jsx","../../src/components/Features.jsx","../../src/components/Testimonials.jsx","../../node_modules/@stripe/stripe-js/dist/stripe.esm.js","../../src/lib/stripe-config.js","../../src/lib/stripe.js","../../src/components/Pricing.jsx","../../src/components/Newsletter.jsx","../../src/components/DemoRequest.jsx","../../src/components/ReferralSystem.jsx","../../src/components/FAQ.jsx","../../src/components/ContactForm.jsx","../../src/pages/LandingPage.jsx","../../src/components/calculator/ROICalculator.jsx","../../src/lib/config.js","../../src/lib/performance-monitor.js","../../src/lib/cache-manager.js","../../src/lib/zillow-api.js","../../src/components/PropertySearch.jsx","../../src/components/AnalysisResults.jsx","../../node_modules/@radix-ui/react-progress/dist/index.mjs","../../src/components/ui/progress.jsx","../../src/components/RiskAssessment.jsx","../../src/components/PropertyAnalysis.jsx","../../src/pages/AnalysisTool.jsx","../../src/components/LoadingSpinner.jsx","../../src/components/dashboard/Dashboard.jsx","../../src/lib/chatgpt.js","../../node_modules/@kurkle/color/dist/color.esm.js","../../node_modules/chart.js/dist/chunks/helpers.segment.js","../../node_modules/chart.js/dist/chart.js","../../node_modules/react-chartjs-2/dist/index.js","../../src/components/market/MarketAnalysis.jsx","../../src/components/comparison/PropertyComparison.jsx","../../src/components/community/CommunityHub.jsx","../../src/components/community/ExpertQA.jsx","../../src/components/community/DirectMessaging.jsx","../../src/pages/SettingsPage.jsx","../../src/lib/email.js","../../src/pages/PaymentSuccess.jsx","../../src/components/ProtectedRoute.jsx","../../src/App.jsx","../../src/main.jsx"],"sourcesContent":["'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","export const resolveFetch = (customFetch) => {\n let _fetch;\n if (customFetch) {\n _fetch = customFetch;\n }\n else if (typeof fetch === 'undefined') {\n _fetch = (...args) => import('@supabase/node-fetch').then(({ default: fetch }) => fetch(...args));\n }\n else {\n _fetch = fetch;\n }\n return (...args) => _fetch(...args);\n};\n//# sourceMappingURL=helper.js.map","export class FunctionsError extends Error {\n constructor(message, name = 'FunctionsError', context) {\n super(message);\n this.name = name;\n this.context = context;\n }\n}\nexport class FunctionsFetchError extends FunctionsError {\n constructor(context) {\n super('Failed to send a request to the Edge Function', 'FunctionsFetchError', context);\n }\n}\nexport class FunctionsRelayError extends FunctionsError {\n constructor(context) {\n super('Relay Error invoking the Edge Function', 'FunctionsRelayError', context);\n }\n}\nexport class FunctionsHttpError extends FunctionsError {\n constructor(context) {\n super('Edge Function returned a non-2xx status code', 'FunctionsHttpError', context);\n }\n}\n// Define the enum for the 'region' property\nexport var FunctionRegion;\n(function (FunctionRegion) {\n FunctionRegion[\"Any\"] = \"any\";\n FunctionRegion[\"ApNortheast1\"] = \"ap-northeast-1\";\n FunctionRegion[\"ApNortheast2\"] = \"ap-northeast-2\";\n FunctionRegion[\"ApSouth1\"] = \"ap-south-1\";\n FunctionRegion[\"ApSoutheast1\"] = \"ap-southeast-1\";\n FunctionRegion[\"ApSoutheast2\"] = \"ap-southeast-2\";\n FunctionRegion[\"CaCentral1\"] = \"ca-central-1\";\n FunctionRegion[\"EuCentral1\"] = \"eu-central-1\";\n FunctionRegion[\"EuWest1\"] = \"eu-west-1\";\n FunctionRegion[\"EuWest2\"] = \"eu-west-2\";\n FunctionRegion[\"EuWest3\"] = \"eu-west-3\";\n FunctionRegion[\"SaEast1\"] = \"sa-east-1\";\n FunctionRegion[\"UsEast1\"] = \"us-east-1\";\n FunctionRegion[\"UsWest1\"] = \"us-west-1\";\n FunctionRegion[\"UsWest2\"] = \"us-west-2\";\n})(FunctionRegion || (FunctionRegion = {}));\n//# sourceMappingURL=types.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { resolveFetch } from './helper';\nimport { FunctionsFetchError, FunctionsHttpError, FunctionsRelayError, FunctionRegion, } from './types';\nexport class FunctionsClient {\n constructor(url, { headers = {}, customFetch, region = FunctionRegion.Any, } = {}) {\n this.url = url;\n this.headers = headers;\n this.region = region;\n this.fetch = resolveFetch(customFetch);\n }\n /**\n * Updates the authorization header\n * @param token - the new jwt token sent in the authorisation header\n */\n setAuth(token) {\n this.headers.Authorization = `Bearer ${token}`;\n }\n /**\n * Invokes a function\n * @param functionName - The name of the Function to invoke.\n * @param options - Options for invoking the Function.\n */\n invoke(functionName, options = {}) {\n var _a;\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const { headers, method, body: functionArgs } = options;\n let _headers = {};\n let { region } = options;\n if (!region) {\n region = this.region;\n }\n if (region && region !== 'any') {\n _headers['x-region'] = region;\n }\n let body;\n if (functionArgs &&\n ((headers && !Object.prototype.hasOwnProperty.call(headers, 'Content-Type')) || !headers)) {\n if ((typeof Blob !== 'undefined' && functionArgs instanceof Blob) ||\n functionArgs instanceof ArrayBuffer) {\n // will work for File as File inherits Blob\n // also works for ArrayBuffer as it is the same underlying structure as a Blob\n _headers['Content-Type'] = 'application/octet-stream';\n body = functionArgs;\n }\n else if (typeof functionArgs === 'string') {\n // plain string\n _headers['Content-Type'] = 'text/plain';\n body = functionArgs;\n }\n else if (typeof FormData !== 'undefined' && functionArgs instanceof FormData) {\n // don't set content-type headers\n // Request will automatically add the right boundary value\n body = functionArgs;\n }\n else {\n // default, assume this is JSON\n _headers['Content-Type'] = 'application/json';\n body = JSON.stringify(functionArgs);\n }\n }\n const response = yield this.fetch(`${this.url}/${functionName}`, {\n method: method || 'POST',\n // headers priority is (high to low):\n // 1. invoke-level headers\n // 2. client-level headers\n // 3. default Content-Type header\n headers: Object.assign(Object.assign(Object.assign({}, _headers), this.headers), headers),\n body,\n }).catch((fetchError) => {\n throw new FunctionsFetchError(fetchError);\n });\n const isRelayError = response.headers.get('x-relay-error');\n if (isRelayError && isRelayError === 'true') {\n throw new FunctionsRelayError(response);\n }\n if (!response.ok) {\n throw new FunctionsHttpError(response);\n }\n let responseType = ((_a = response.headers.get('Content-Type')) !== null && _a !== void 0 ? _a : 'text/plain').split(';')[0].trim();\n let data;\n if (responseType === 'application/json') {\n data = yield response.json();\n }\n else if (responseType === 'application/octet-stream') {\n data = yield response.blob();\n }\n else if (responseType === 'text/event-stream') {\n data = response;\n }\n else if (responseType === 'multipart/form-data') {\n data = yield response.formData();\n }\n else {\n // default to text\n data = yield response.text();\n }\n return { data, error: null };\n }\n catch (error) {\n return { data: null, error };\n }\n });\n }\n}\n//# sourceMappingURL=FunctionsClient.js.map","\"use strict\";\n\n// ref: https://github.com/tc39/proposal-global\nvar getGlobal = function() {\n // the only reliable means to get the global object is\n // `Function('return this')()`\n // However, this causes CSP violations in Chrome apps.\n if (typeof self !== 'undefined') { return self; }\n if (typeof window !== 'undefined') { return window; }\n if (typeof global !== 'undefined') { return global; }\n throw new Error('unable to locate global object');\n}\n\nvar globalObject = getGlobal();\n\nexport const fetch = globalObject.fetch;\n\nexport default globalObject.fetch.bind(globalObject);\n\nexport const Headers = globalObject.Headers;\nexport const Request = globalObject.Request;\nexport const Response = globalObject.Response;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Error format\n *\n * {@link https://postgrest.org/en/stable/api.html?highlight=options#errors-and-http-status-codes}\n */\nclass PostgrestError extends Error {\n constructor(context) {\n super(context.message);\n this.name = 'PostgrestError';\n this.details = context.details;\n this.hint = context.hint;\n this.code = context.code;\n }\n}\nexports.default = PostgrestError;\n//# sourceMappingURL=PostgrestError.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n// @ts-ignore\nconst node_fetch_1 = __importDefault(require(\"@supabase/node-fetch\"));\nconst PostgrestError_1 = __importDefault(require(\"./PostgrestError\"));\nclass PostgrestBuilder {\n constructor(builder) {\n this.shouldThrowOnError = false;\n this.method = builder.method;\n this.url = builder.url;\n this.headers = builder.headers;\n this.schema = builder.schema;\n this.body = builder.body;\n this.shouldThrowOnError = builder.shouldThrowOnError;\n this.signal = builder.signal;\n this.isMaybeSingle = builder.isMaybeSingle;\n if (builder.fetch) {\n this.fetch = builder.fetch;\n }\n else if (typeof fetch === 'undefined') {\n this.fetch = node_fetch_1.default;\n }\n else {\n this.fetch = fetch;\n }\n }\n /**\n * If there's an error with the query, throwOnError will reject the promise by\n * throwing the error instead of returning it as part of a successful response.\n *\n * {@link https://github.com/supabase/supabase-js/issues/92}\n */\n throwOnError() {\n this.shouldThrowOnError = true;\n return this;\n }\n /**\n * Set an HTTP header for the request.\n */\n setHeader(name, value) {\n this.headers = Object.assign({}, this.headers);\n this.headers[name] = value;\n return this;\n }\n then(onfulfilled, onrejected) {\n // https://postgrest.org/en/stable/api.html#switching-schemas\n if (this.schema === undefined) {\n // skip\n }\n else if (['GET', 'HEAD'].includes(this.method)) {\n this.headers['Accept-Profile'] = this.schema;\n }\n else {\n this.headers['Content-Profile'] = this.schema;\n }\n if (this.method !== 'GET' && this.method !== 'HEAD') {\n this.headers['Content-Type'] = 'application/json';\n }\n // NOTE: Invoke w/o `this` to avoid illegal invocation error.\n // https://github.com/supabase/postgrest-js/pull/247\n const _fetch = this.fetch;\n let res = _fetch(this.url.toString(), {\n method: this.method,\n headers: this.headers,\n body: JSON.stringify(this.body),\n signal: this.signal,\n }).then(async (res) => {\n var _a, _b, _c;\n let error = null;\n let data = null;\n let count = null;\n let status = res.status;\n let statusText = res.statusText;\n if (res.ok) {\n if (this.method !== 'HEAD') {\n const body = await res.text();\n if (body === '') {\n // Prefer: return=minimal\n }\n else if (this.headers['Accept'] === 'text/csv') {\n data = body;\n }\n else if (this.headers['Accept'] &&\n this.headers['Accept'].includes('application/vnd.pgrst.plan+text')) {\n data = body;\n }\n else {\n data = JSON.parse(body);\n }\n }\n const countHeader = (_a = this.headers['Prefer']) === null || _a === void 0 ? void 0 : _a.match(/count=(exact|planned|estimated)/);\n const contentRange = (_b = res.headers.get('content-range')) === null || _b === void 0 ? void 0 : _b.split('/');\n if (countHeader && contentRange && contentRange.length > 1) {\n count = parseInt(contentRange[1]);\n }\n // Temporary partial fix for https://github.com/supabase/postgrest-js/issues/361\n // Issue persists e.g. for `.insert([...]).select().maybeSingle()`\n if (this.isMaybeSingle && this.method === 'GET' && Array.isArray(data)) {\n if (data.length > 1) {\n error = {\n // https://github.com/PostgREST/postgrest/blob/a867d79c42419af16c18c3fb019eba8df992626f/src/PostgREST/Error.hs#L553\n code: 'PGRST116',\n details: `Results contain ${data.length} rows, application/vnd.pgrst.object+json requires 1 row`,\n hint: null,\n message: 'JSON object requested, multiple (or no) rows returned',\n };\n data = null;\n count = null;\n status = 406;\n statusText = 'Not Acceptable';\n }\n else if (data.length === 1) {\n data = data[0];\n }\n else {\n data = null;\n }\n }\n }\n else {\n const body = await res.text();\n try {\n error = JSON.parse(body);\n // Workaround for https://github.com/supabase/postgrest-js/issues/295\n if (Array.isArray(error) && res.status === 404) {\n data = [];\n error = null;\n status = 200;\n statusText = 'OK';\n }\n }\n catch (_d) {\n // Workaround for https://github.com/supabase/postgrest-js/issues/295\n if (res.status === 404 && body === '') {\n status = 204;\n statusText = 'No Content';\n }\n else {\n error = {\n message: body,\n };\n }\n }\n if (error && this.isMaybeSingle && ((_c = error === null || error === void 0 ? void 0 : error.details) === null || _c === void 0 ? void 0 : _c.includes('0 rows'))) {\n error = null;\n status = 200;\n statusText = 'OK';\n }\n if (error && this.shouldThrowOnError) {\n throw new PostgrestError_1.default(error);\n }\n }\n const postgrestResponse = {\n error,\n data,\n count,\n status,\n statusText,\n };\n return postgrestResponse;\n });\n if (!this.shouldThrowOnError) {\n res = res.catch((fetchError) => {\n var _a, _b, _c;\n return ({\n error: {\n message: `${(_a = fetchError === null || fetchError === void 0 ? void 0 : fetchError.name) !== null && _a !== void 0 ? _a : 'FetchError'}: ${fetchError === null || fetchError === void 0 ? void 0 : fetchError.message}`,\n details: `${(_b = fetchError === null || fetchError === void 0 ? void 0 : fetchError.stack) !== null && _b !== void 0 ? _b : ''}`,\n hint: '',\n code: `${(_c = fetchError === null || fetchError === void 0 ? void 0 : fetchError.code) !== null && _c !== void 0 ? _c : ''}`,\n },\n data: null,\n count: null,\n status: 0,\n statusText: '',\n });\n });\n }\n return res.then(onfulfilled, onrejected);\n }\n /**\n * Override the type of the returned `data`.\n *\n * @typeParam NewResult - The new result type to override with\n * @deprecated Use overrideTypes() method at the end of your call chain instead\n */\n returns() {\n /* istanbul ignore next */\n return this;\n }\n /**\n * Override the type of the returned `data` field in the response.\n *\n * @typeParam NewResult - The new type to cast the response data to\n * @typeParam Options - Optional type configuration (defaults to { merge: true })\n * @typeParam Options.merge - When true, merges the new type with existing return type. When false, replaces the existing types entirely (defaults to true)\n * @example\n * ```typescript\n * // Merge with existing types (default behavior)\n * const query = supabase\n * .from('users')\n * .select()\n * .overrideTypes<{ custom_field: string }>()\n *\n * // Replace existing types completely\n * const replaceQuery = supabase\n * .from('users')\n * .select()\n * .overrideTypes<{ id: number; name: string }, { merge: false }>()\n * ```\n * @returns A PostgrestBuilder instance with the new type\n */\n overrideTypes() {\n return this;\n }\n}\nexports.default = PostgrestBuilder;\n//# sourceMappingURL=PostgrestBuilder.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst PostgrestBuilder_1 = __importDefault(require(\"./PostgrestBuilder\"));\nclass PostgrestTransformBuilder extends PostgrestBuilder_1.default {\n /**\n * Perform a SELECT on the query result.\n *\n * By default, `.insert()`, `.update()`, `.upsert()`, and `.delete()` do not\n * return modified rows. By calling this method, modified rows are returned in\n * `data`.\n *\n * @param columns - The columns to retrieve, separated by commas\n */\n select(columns) {\n // Remove whitespaces except when quoted\n let quoted = false;\n const cleanedColumns = (columns !== null && columns !== void 0 ? columns : '*')\n .split('')\n .map((c) => {\n if (/\\s/.test(c) && !quoted) {\n return '';\n }\n if (c === '\"') {\n quoted = !quoted;\n }\n return c;\n })\n .join('');\n this.url.searchParams.set('select', cleanedColumns);\n if (this.headers['Prefer']) {\n this.headers['Prefer'] += ',';\n }\n this.headers['Prefer'] += 'return=representation';\n return this;\n }\n /**\n * Order the query result by `column`.\n *\n * You can call this method multiple times to order by multiple columns.\n *\n * You can order referenced tables, but it only affects the ordering of the\n * parent table if you use `!inner` in the query.\n *\n * @param column - The column to order by\n * @param options - Named parameters\n * @param options.ascending - If `true`, the result will be in ascending order\n * @param options.nullsFirst - If `true`, `null`s appear first. If `false`,\n * `null`s appear last.\n * @param options.referencedTable - Set this to order a referenced table by\n * its columns\n * @param options.foreignTable - Deprecated, use `options.referencedTable`\n * instead\n */\n order(column, { ascending = true, nullsFirst, foreignTable, referencedTable = foreignTable, } = {}) {\n const key = referencedTable ? `${referencedTable}.order` : 'order';\n const existingOrder = this.url.searchParams.get(key);\n this.url.searchParams.set(key, `${existingOrder ? `${existingOrder},` : ''}${column}.${ascending ? 'asc' : 'desc'}${nullsFirst === undefined ? '' : nullsFirst ? '.nullsfirst' : '.nullslast'}`);\n return this;\n }\n /**\n * Limit the query result by `count`.\n *\n * @param count - The maximum number of rows to return\n * @param options - Named parameters\n * @param options.referencedTable - Set this to limit rows of referenced\n * tables instead of the parent table\n * @param options.foreignTable - Deprecated, use `options.referencedTable`\n * instead\n */\n limit(count, { foreignTable, referencedTable = foreignTable, } = {}) {\n const key = typeof referencedTable === 'undefined' ? 'limit' : `${referencedTable}.limit`;\n this.url.searchParams.set(key, `${count}`);\n return this;\n }\n /**\n * Limit the query result by starting at an offset `from` and ending at the offset `to`.\n * Only records within this range are returned.\n * This respects the query order and if there is no order clause the range could behave unexpectedly.\n * The `from` and `to` values are 0-based and inclusive: `range(1, 3)` will include the second, third\n * and fourth rows of the query.\n *\n * @param from - The starting index from which to limit the result\n * @param to - The last index to which to limit the result\n * @param options - Named parameters\n * @param options.referencedTable - Set this to limit rows of referenced\n * tables instead of the parent table\n * @param options.foreignTable - Deprecated, use `options.referencedTable`\n * instead\n */\n range(from, to, { foreignTable, referencedTable = foreignTable, } = {}) {\n const keyOffset = typeof referencedTable === 'undefined' ? 'offset' : `${referencedTable}.offset`;\n const keyLimit = typeof referencedTable === 'undefined' ? 'limit' : `${referencedTable}.limit`;\n this.url.searchParams.set(keyOffset, `${from}`);\n // Range is inclusive, so add 1\n this.url.searchParams.set(keyLimit, `${to - from + 1}`);\n return this;\n }\n /**\n * Set the AbortSignal for the fetch request.\n *\n * @param signal - The AbortSignal to use for the fetch request\n */\n abortSignal(signal) {\n this.signal = signal;\n return this;\n }\n /**\n * Return `data` as a single object instead of an array of objects.\n *\n * Query result must be one row (e.g. using `.limit(1)`), otherwise this\n * returns an error.\n */\n single() {\n this.headers['Accept'] = 'application/vnd.pgrst.object+json';\n return this;\n }\n /**\n * Return `data` as a single object instead of an array of objects.\n *\n * Query result must be zero or one row (e.g. using `.limit(1)`), otherwise\n * this returns an error.\n */\n maybeSingle() {\n // Temporary partial fix for https://github.com/supabase/postgrest-js/issues/361\n // Issue persists e.g. for `.insert([...]).select().maybeSingle()`\n if (this.method === 'GET') {\n this.headers['Accept'] = 'application/json';\n }\n else {\n this.headers['Accept'] = 'application/vnd.pgrst.object+json';\n }\n this.isMaybeSingle = true;\n return this;\n }\n /**\n * Return `data` as a string in CSV format.\n */\n csv() {\n this.headers['Accept'] = 'text/csv';\n return this;\n }\n /**\n * Return `data` as an object in [GeoJSON](https://geojson.org) format.\n */\n geojson() {\n this.headers['Accept'] = 'application/geo+json';\n return this;\n }\n /**\n * Return `data` as the EXPLAIN plan for the query.\n *\n * You need to enable the\n * [db_plan_enabled](https://supabase.com/docs/guides/database/debugging-performance#enabling-explain)\n * setting before using this method.\n *\n * @param options - Named parameters\n *\n * @param options.analyze - If `true`, the query will be executed and the\n * actual run time will be returned\n *\n * @param options.verbose - If `true`, the query identifier will be returned\n * and `data` will include the output columns of the query\n *\n * @param options.settings - If `true`, include information on configuration\n * parameters that affect query planning\n *\n * @param options.buffers - If `true`, include information on buffer usage\n *\n * @param options.wal - If `true`, include information on WAL record generation\n *\n * @param options.format - The format of the output, can be `\"text\"` (default)\n * or `\"json\"`\n */\n explain({ analyze = false, verbose = false, settings = false, buffers = false, wal = false, format = 'text', } = {}) {\n var _a;\n const options = [\n analyze ? 'analyze' : null,\n verbose ? 'verbose' : null,\n settings ? 'settings' : null,\n buffers ? 'buffers' : null,\n wal ? 'wal' : null,\n ]\n .filter(Boolean)\n .join('|');\n // An Accept header can carry multiple media types but postgrest-js always sends one\n const forMediatype = (_a = this.headers['Accept']) !== null && _a !== void 0 ? _a : 'application/json';\n this.headers['Accept'] = `application/vnd.pgrst.plan+${format}; for=\"${forMediatype}\"; options=${options};`;\n if (format === 'json')\n return this;\n else\n return this;\n }\n /**\n * Rollback the query.\n *\n * `data` will still be returned, but the query is not committed.\n */\n rollback() {\n var _a;\n if (((_a = this.headers['Prefer']) !== null && _a !== void 0 ? _a : '').trim().length > 0) {\n this.headers['Prefer'] += ',tx=rollback';\n }\n else {\n this.headers['Prefer'] = 'tx=rollback';\n }\n return this;\n }\n /**\n * Override the type of the returned `data`.\n *\n * @typeParam NewResult - The new result type to override with\n * @deprecated Use overrideTypes() method at the end of your call chain instead\n */\n returns() {\n return this;\n }\n}\nexports.default = PostgrestTransformBuilder;\n//# sourceMappingURL=PostgrestTransformBuilder.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst PostgrestTransformBuilder_1 = __importDefault(require(\"./PostgrestTransformBuilder\"));\nclass PostgrestFilterBuilder extends PostgrestTransformBuilder_1.default {\n /**\n * Match only rows where `column` is equal to `value`.\n *\n * To check if the value of `column` is NULL, you should use `.is()` instead.\n *\n * @param column - The column to filter on\n * @param value - The value to filter with\n */\n eq(column, value) {\n this.url.searchParams.append(column, `eq.${value}`);\n return this;\n }\n /**\n * Match only rows where `column` is not equal to `value`.\n *\n * @param column - The column to filter on\n * @param value - The value to filter with\n */\n neq(column, value) {\n this.url.searchParams.append(column, `neq.${value}`);\n return this;\n }\n /**\n * Match only rows where `column` is greater than `value`.\n *\n * @param column - The column to filter on\n * @param value - The value to filter with\n */\n gt(column, value) {\n this.url.searchParams.append(column, `gt.${value}`);\n return this;\n }\n /**\n * Match only rows where `column` is greater than or equal to `value`.\n *\n * @param column - The column to filter on\n * @param value - The value to filter with\n */\n gte(column, value) {\n this.url.searchParams.append(column, `gte.${value}`);\n return this;\n }\n /**\n * Match only rows where `column` is less than `value`.\n *\n * @param column - The column to filter on\n * @param value - The value to filter with\n */\n lt(column, value) {\n this.url.searchParams.append(column, `lt.${value}`);\n return this;\n }\n /**\n * Match only rows where `column` is less than or equal to `value`.\n *\n * @param column - The column to filter on\n * @param value - The value to filter with\n */\n lte(column, value) {\n this.url.searchParams.append(column, `lte.${value}`);\n return this;\n }\n /**\n * Match only rows where `column` matches `pattern` case-sensitively.\n *\n * @param column - The column to filter on\n * @param pattern - The pattern to match with\n */\n like(column, pattern) {\n this.url.searchParams.append(column, `like.${pattern}`);\n return this;\n }\n /**\n * Match only rows where `column` matches all of `patterns` case-sensitively.\n *\n * @param column - The column to filter on\n * @param patterns - The patterns to match with\n */\n likeAllOf(column, patterns) {\n this.url.searchParams.append(column, `like(all).{${patterns.join(',')}}`);\n return this;\n }\n /**\n * Match only rows where `column` matches any of `patterns` case-sensitively.\n *\n * @param column - The column to filter on\n * @param patterns - The patterns to match with\n */\n likeAnyOf(column, patterns) {\n this.url.searchParams.append(column, `like(any).{${patterns.join(',')}}`);\n return this;\n }\n /**\n * Match only rows where `column` matches `pattern` case-insensitively.\n *\n * @param column - The column to filter on\n * @param pattern - The pattern to match with\n */\n ilike(column, pattern) {\n this.url.searchParams.append(column, `ilike.${pattern}`);\n return this;\n }\n /**\n * Match only rows where `column` matches all of `patterns` case-insensitively.\n *\n * @param column - The column to filter on\n * @param patterns - The patterns to match with\n */\n ilikeAllOf(column, patterns) {\n this.url.searchParams.append(column, `ilike(all).{${patterns.join(',')}}`);\n return this;\n }\n /**\n * Match only rows where `column` matches any of `patterns` case-insensitively.\n *\n * @param column - The column to filter on\n * @param patterns - The patterns to match with\n */\n ilikeAnyOf(column, patterns) {\n this.url.searchParams.append(column, `ilike(any).{${patterns.join(',')}}`);\n return this;\n }\n /**\n * Match only rows where `column` IS `value`.\n *\n * For non-boolean columns, this is only relevant for checking if the value of\n * `column` is NULL by setting `value` to `null`.\n *\n * For boolean columns, you can also set `value` to `true` or `false` and it\n * will behave the same way as `.eq()`.\n *\n * @param column - The column to filter on\n * @param value - The value to filter with\n */\n is(column, value) {\n this.url.searchParams.append(column, `is.${value}`);\n return this;\n }\n /**\n * Match only rows where `column` is included in the `values` array.\n *\n * @param column - The column to filter on\n * @param values - The values array to filter with\n */\n in(column, values) {\n const cleanedValues = Array.from(new Set(values))\n .map((s) => {\n // handle postgrest reserved characters\n // https://postgrest.org/en/v7.0.0/api.html#reserved-characters\n if (typeof s === 'string' && new RegExp('[,()]').test(s))\n return `\"${s}\"`;\n else\n return `${s}`;\n })\n .join(',');\n this.url.searchParams.append(column, `in.(${cleanedValues})`);\n return this;\n }\n /**\n * Only relevant for jsonb, array, and range columns. Match only rows where\n * `column` contains every element appearing in `value`.\n *\n * @param column - The jsonb, array, or range column to filter on\n * @param value - The jsonb, array, or range value to filter with\n */\n contains(column, value) {\n if (typeof value === 'string') {\n // range types can be inclusive '[', ']' or exclusive '(', ')' so just\n // keep it simple and accept a string\n this.url.searchParams.append(column, `cs.${value}`);\n }\n else if (Array.isArray(value)) {\n // array\n this.url.searchParams.append(column, `cs.{${value.join(',')}}`);\n }\n else {\n // json\n this.url.searchParams.append(column, `cs.${JSON.stringify(value)}`);\n }\n return this;\n }\n /**\n * Only relevant for jsonb, array, and range columns. Match only rows where\n * every element appearing in `column` is contained by `value`.\n *\n * @param column - The jsonb, array, or range column to filter on\n * @param value - The jsonb, array, or range value to filter with\n */\n containedBy(column, value) {\n if (typeof value === 'string') {\n // range\n this.url.searchParams.append(column, `cd.${value}`);\n }\n else if (Array.isArray(value)) {\n // array\n this.url.searchParams.append(column, `cd.{${value.join(',')}}`);\n }\n else {\n // json\n this.url.searchParams.append(column, `cd.${JSON.stringify(value)}`);\n }\n return this;\n }\n /**\n * Only relevant for range columns. Match only rows where every element in\n * `column` is greater than any element in `range`.\n *\n * @param column - The range column to filter on\n * @param range - The range to filter with\n */\n rangeGt(column, range) {\n this.url.searchParams.append(column, `sr.${range}`);\n return this;\n }\n /**\n * Only relevant for range columns. Match only rows where every element in\n * `column` is either contained in `range` or greater than any element in\n * `range`.\n *\n * @param column - The range column to filter on\n * @param range - The range to filter with\n */\n rangeGte(column, range) {\n this.url.searchParams.append(column, `nxl.${range}`);\n return this;\n }\n /**\n * Only relevant for range columns. Match only rows where every element in\n * `column` is less than any element in `range`.\n *\n * @param column - The range column to filter on\n * @param range - The range to filter with\n */\n rangeLt(column, range) {\n this.url.searchParams.append(column, `sl.${range}`);\n return this;\n }\n /**\n * Only relevant for range columns. Match only rows where every element in\n * `column` is either contained in `range` or less than any element in\n * `range`.\n *\n * @param column - The range column to filter on\n * @param range - The range to filter with\n */\n rangeLte(column, range) {\n this.url.searchParams.append(column, `nxr.${range}`);\n return this;\n }\n /**\n * Only relevant for range columns. Match only rows where `column` is\n * mutually exclusive to `range` and there can be no element between the two\n * ranges.\n *\n * @param column - The range column to filter on\n * @param range - The range to filter with\n */\n rangeAdjacent(column, range) {\n this.url.searchParams.append(column, `adj.${range}`);\n return this;\n }\n /**\n * Only relevant for array and range columns. Match only rows where\n * `column` and `value` have an element in common.\n *\n * @param column - The array or range column to filter on\n * @param value - The array or range value to filter with\n */\n overlaps(column, value) {\n if (typeof value === 'string') {\n // range\n this.url.searchParams.append(column, `ov.${value}`);\n }\n else {\n // array\n this.url.searchParams.append(column, `ov.{${value.join(',')}}`);\n }\n return this;\n }\n /**\n * Only relevant for text and tsvector columns. Match only rows where\n * `column` matches the query string in `query`.\n *\n * @param column - The text or tsvector column to filter on\n * @param query - The query text to match with\n * @param options - Named parameters\n * @param options.config - The text search configuration to use\n * @param options.type - Change how the `query` text is interpreted\n */\n textSearch(column, query, { config, type } = {}) {\n let typePart = '';\n if (type === 'plain') {\n typePart = 'pl';\n }\n else if (type === 'phrase') {\n typePart = 'ph';\n }\n else if (type === 'websearch') {\n typePart = 'w';\n }\n const configPart = config === undefined ? '' : `(${config})`;\n this.url.searchParams.append(column, `${typePart}fts${configPart}.${query}`);\n return this;\n }\n /**\n * Match only rows where each column in `query` keys is equal to its\n * associated value. Shorthand for multiple `.eq()`s.\n *\n * @param query - The object to filter with, with column names as keys mapped\n * to their filter values\n */\n match(query) {\n Object.entries(query).forEach(([column, value]) => {\n this.url.searchParams.append(column, `eq.${value}`);\n });\n return this;\n }\n /**\n * Match only rows which doesn't satisfy the filter.\n *\n * Unlike most filters, `opearator` and `value` are used as-is and need to\n * follow [PostgREST\n * syntax](https://postgrest.org/en/stable/api.html#operators). You also need\n * to make sure they are properly sanitized.\n *\n * @param column - The column to filter on\n * @param operator - The operator to be negated to filter with, following\n * PostgREST syntax\n * @param value - The value to filter with, following PostgREST syntax\n */\n not(column, operator, value) {\n this.url.searchParams.append(column, `not.${operator}.${value}`);\n return this;\n }\n /**\n * Match only rows which satisfy at least one of the filters.\n *\n * Unlike most filters, `filters` is used as-is and needs to follow [PostgREST\n * syntax](https://postgrest.org/en/stable/api.html#operators). You also need\n * to make sure it's properly sanitized.\n *\n * It's currently not possible to do an `.or()` filter across multiple tables.\n *\n * @param filters - The filters to use, following PostgREST syntax\n * @param options - Named parameters\n * @param options.referencedTable - Set this to filter on referenced tables\n * instead of the parent table\n * @param options.foreignTable - Deprecated, use `referencedTable` instead\n */\n or(filters, { foreignTable, referencedTable = foreignTable, } = {}) {\n const key = referencedTable ? `${referencedTable}.or` : 'or';\n this.url.searchParams.append(key, `(${filters})`);\n return this;\n }\n /**\n * Match only rows which satisfy the filter. This is an escape hatch - you\n * should use the specific filter methods wherever possible.\n *\n * Unlike most filters, `opearator` and `value` are used as-is and need to\n * follow [PostgREST\n * syntax](https://postgrest.org/en/stable/api.html#operators). You also need\n * to make sure they are properly sanitized.\n *\n * @param column - The column to filter on\n * @param operator - The operator to filter with, following PostgREST syntax\n * @param value - The value to filter with, following PostgREST syntax\n */\n filter(column, operator, value) {\n this.url.searchParams.append(column, `${operator}.${value}`);\n return this;\n }\n}\nexports.default = PostgrestFilterBuilder;\n//# sourceMappingURL=PostgrestFilterBuilder.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst PostgrestFilterBuilder_1 = __importDefault(require(\"./PostgrestFilterBuilder\"));\nclass PostgrestQueryBuilder {\n constructor(url, { headers = {}, schema, fetch, }) {\n this.url = url;\n this.headers = headers;\n this.schema = schema;\n this.fetch = fetch;\n }\n /**\n * Perform a SELECT query on the table or view.\n *\n * @param columns - The columns to retrieve, separated by commas. Columns can be renamed when returned with `customName:columnName`\n *\n * @param options - Named parameters\n *\n * @param options.head - When set to `true`, `data` will not be returned.\n * Useful if you only need the count.\n *\n * @param options.count - Count algorithm to use to count rows in the table or view.\n *\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n * hood.\n *\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n * statistics under the hood.\n *\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\n * numbers.\n */\n select(columns, { head = false, count, } = {}) {\n const method = head ? 'HEAD' : 'GET';\n // Remove whitespaces except when quoted\n let quoted = false;\n const cleanedColumns = (columns !== null && columns !== void 0 ? columns : '*')\n .split('')\n .map((c) => {\n if (/\\s/.test(c) && !quoted) {\n return '';\n }\n if (c === '\"') {\n quoted = !quoted;\n }\n return c;\n })\n .join('');\n this.url.searchParams.set('select', cleanedColumns);\n if (count) {\n this.headers['Prefer'] = `count=${count}`;\n }\n return new PostgrestFilterBuilder_1.default({\n method,\n url: this.url,\n headers: this.headers,\n schema: this.schema,\n fetch: this.fetch,\n allowEmpty: false,\n });\n }\n /**\n * Perform an INSERT into the table or view.\n *\n * By default, inserted rows are not returned. To return it, chain the call\n * with `.select()`.\n *\n * @param values - The values to insert. Pass an object to insert a single row\n * or an array to insert multiple rows.\n *\n * @param options - Named parameters\n *\n * @param options.count - Count algorithm to use to count inserted rows.\n *\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n * hood.\n *\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n * statistics under the hood.\n *\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\n * numbers.\n *\n * @param options.defaultToNull - Make missing fields default to `null`.\n * Otherwise, use the default value for the column. Only applies for bulk\n * inserts.\n */\n insert(values, { count, defaultToNull = true, } = {}) {\n const method = 'POST';\n const prefersHeaders = [];\n if (this.headers['Prefer']) {\n prefersHeaders.push(this.headers['Prefer']);\n }\n if (count) {\n prefersHeaders.push(`count=${count}`);\n }\n if (!defaultToNull) {\n prefersHeaders.push('missing=default');\n }\n this.headers['Prefer'] = prefersHeaders.join(',');\n if (Array.isArray(values)) {\n const columns = values.reduce((acc, x) => acc.concat(Object.keys(x)), []);\n if (columns.length > 0) {\n const uniqueColumns = [...new Set(columns)].map((column) => `\"${column}\"`);\n this.url.searchParams.set('columns', uniqueColumns.join(','));\n }\n }\n return new PostgrestFilterBuilder_1.default({\n method,\n url: this.url,\n headers: this.headers,\n schema: this.schema,\n body: values,\n fetch: this.fetch,\n allowEmpty: false,\n });\n }\n /**\n * Perform an UPSERT on the table or view. Depending on the column(s) passed\n * to `onConflict`, `.upsert()` allows you to perform the equivalent of\n * `.insert()` if a row with the corresponding `onConflict` columns doesn't\n * exist, or if it does exist, perform an alternative action depending on\n * `ignoreDuplicates`.\n *\n * By default, upserted rows are not returned. To return it, chain the call\n * with `.select()`.\n *\n * @param values - The values to upsert with. Pass an object to upsert a\n * single row or an array to upsert multiple rows.\n *\n * @param options - Named parameters\n *\n * @param options.onConflict - Comma-separated UNIQUE column(s) to specify how\n * duplicate rows are determined. Two rows are duplicates if all the\n * `onConflict` columns are equal.\n *\n * @param options.ignoreDuplicates - If `true`, duplicate rows are ignored. If\n * `false`, duplicate rows are merged with existing rows.\n *\n * @param options.count - Count algorithm to use to count upserted rows.\n *\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n * hood.\n *\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n * statistics under the hood.\n *\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\n * numbers.\n *\n * @param options.defaultToNull - Make missing fields default to `null`.\n * Otherwise, use the default value for the column. This only applies when\n * inserting new rows, not when merging with existing rows under\n * `ignoreDuplicates: false`. This also only applies when doing bulk upserts.\n */\n upsert(values, { onConflict, ignoreDuplicates = false, count, defaultToNull = true, } = {}) {\n const method = 'POST';\n const prefersHeaders = [`resolution=${ignoreDuplicates ? 'ignore' : 'merge'}-duplicates`];\n if (onConflict !== undefined)\n this.url.searchParams.set('on_conflict', onConflict);\n if (this.headers['Prefer']) {\n prefersHeaders.push(this.headers['Prefer']);\n }\n if (count) {\n prefersHeaders.push(`count=${count}`);\n }\n if (!defaultToNull) {\n prefersHeaders.push('missing=default');\n }\n this.headers['Prefer'] = prefersHeaders.join(',');\n if (Array.isArray(values)) {\n const columns = values.reduce((acc, x) => acc.concat(Object.keys(x)), []);\n if (columns.length > 0) {\n const uniqueColumns = [...new Set(columns)].map((column) => `\"${column}\"`);\n this.url.searchParams.set('columns', uniqueColumns.join(','));\n }\n }\n return new PostgrestFilterBuilder_1.default({\n method,\n url: this.url,\n headers: this.headers,\n schema: this.schema,\n body: values,\n fetch: this.fetch,\n allowEmpty: false,\n });\n }\n /**\n * Perform an UPDATE on the table or view.\n *\n * By default, updated rows are not returned. To return it, chain the call\n * with `.select()` after filters.\n *\n * @param values - The values to update with\n *\n * @param options - Named parameters\n *\n * @param options.count - Count algorithm to use to count updated rows.\n *\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n * hood.\n *\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n * statistics under the hood.\n *\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\n * numbers.\n */\n update(values, { count, } = {}) {\n const method = 'PATCH';\n const prefersHeaders = [];\n if (this.headers['Prefer']) {\n prefersHeaders.push(this.headers['Prefer']);\n }\n if (count) {\n prefersHeaders.push(`count=${count}`);\n }\n this.headers['Prefer'] = prefersHeaders.join(',');\n return new PostgrestFilterBuilder_1.default({\n method,\n url: this.url,\n headers: this.headers,\n schema: this.schema,\n body: values,\n fetch: this.fetch,\n allowEmpty: false,\n });\n }\n /**\n * Perform a DELETE on the table or view.\n *\n * By default, deleted rows are not returned. To return it, chain the call\n * with `.select()` after filters.\n *\n * @param options - Named parameters\n *\n * @param options.count - Count algorithm to use to count deleted rows.\n *\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n * hood.\n *\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n * statistics under the hood.\n *\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\n * numbers.\n */\n delete({ count, } = {}) {\n const method = 'DELETE';\n const prefersHeaders = [];\n if (count) {\n prefersHeaders.push(`count=${count}`);\n }\n if (this.headers['Prefer']) {\n prefersHeaders.unshift(this.headers['Prefer']);\n }\n this.headers['Prefer'] = prefersHeaders.join(',');\n return new PostgrestFilterBuilder_1.default({\n method,\n url: this.url,\n headers: this.headers,\n schema: this.schema,\n fetch: this.fetch,\n allowEmpty: false,\n });\n }\n}\nexports.default = PostgrestQueryBuilder;\n//# sourceMappingURL=PostgrestQueryBuilder.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.version = void 0;\nexports.version = '0.0.0-automated';\n//# sourceMappingURL=version.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_HEADERS = void 0;\nconst version_1 = require(\"./version\");\nexports.DEFAULT_HEADERS = { 'X-Client-Info': `postgrest-js/${version_1.version}` };\n//# sourceMappingURL=constants.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst PostgrestQueryBuilder_1 = __importDefault(require(\"./PostgrestQueryBuilder\"));\nconst PostgrestFilterBuilder_1 = __importDefault(require(\"./PostgrestFilterBuilder\"));\nconst constants_1 = require(\"./constants\");\n/**\n * PostgREST client.\n *\n * @typeParam Database - Types for the schema from the [type\n * generator](https://supabase.com/docs/reference/javascript/next/typescript-support)\n *\n * @typeParam SchemaName - Postgres schema to switch to. Must be a string\n * literal, the same one passed to the constructor. If the schema is not\n * `\"public\"`, this must be supplied manually.\n */\nclass PostgrestClient {\n // TODO: Add back shouldThrowOnError once we figure out the typings\n /**\n * Creates a PostgREST client.\n *\n * @param url - URL of the PostgREST endpoint\n * @param options - Named parameters\n * @param options.headers - Custom headers\n * @param options.schema - Postgres schema to switch to\n * @param options.fetch - Custom fetch\n */\n constructor(url, { headers = {}, schema, fetch, } = {}) {\n this.url = url;\n this.headers = Object.assign(Object.assign({}, constants_1.DEFAULT_HEADERS), headers);\n this.schemaName = schema;\n this.fetch = fetch;\n }\n /**\n * Perform a query on a table or a view.\n *\n * @param relation - The table or view name to query\n */\n from(relation) {\n const url = new URL(`${this.url}/${relation}`);\n return new PostgrestQueryBuilder_1.default(url, {\n headers: Object.assign({}, this.headers),\n schema: this.schemaName,\n fetch: this.fetch,\n });\n }\n /**\n * Select a schema to query or perform an function (rpc) call.\n *\n * The schema needs to be on the list of exposed schemas inside Supabase.\n *\n * @param schema - The schema to query\n */\n schema(schema) {\n return new PostgrestClient(this.url, {\n headers: this.headers,\n schema,\n fetch: this.fetch,\n });\n }\n /**\n * Perform a function call.\n *\n * @param fn - The function name to call\n * @param args - The arguments to pass to the function call\n * @param options - Named parameters\n * @param options.head - When set to `true`, `data` will not be returned.\n * Useful if you only need the count.\n * @param options.get - When set to `true`, the function will be called with\n * read-only access mode.\n * @param options.count - Count algorithm to use to count rows returned by the\n * function. Only applicable for [set-returning\n * functions](https://www.postgresql.org/docs/current/functions-srf.html).\n *\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n * hood.\n *\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n * statistics under the hood.\n *\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\n * numbers.\n */\n rpc(fn, args = {}, { head = false, get = false, count, } = {}) {\n let method;\n const url = new URL(`${this.url}/rpc/${fn}`);\n let body;\n if (head || get) {\n method = head ? 'HEAD' : 'GET';\n Object.entries(args)\n // params with undefined value needs to be filtered out, otherwise it'll\n // show up as `?param=undefined`\n .filter(([_, value]) => value !== undefined)\n // array values need special syntax\n .map(([name, value]) => [name, Array.isArray(value) ? `{${value.join(',')}}` : `${value}`])\n .forEach(([name, value]) => {\n url.searchParams.append(name, value);\n });\n }\n else {\n method = 'POST';\n body = args;\n }\n const headers = Object.assign({}, this.headers);\n if (count) {\n headers['Prefer'] = `count=${count}`;\n }\n return new PostgrestFilterBuilder_1.default({\n method,\n url,\n headers,\n schema: this.schemaName,\n body,\n fetch: this.fetch,\n allowEmpty: false,\n });\n }\n}\nexports.default = PostgrestClient;\n//# sourceMappingURL=PostgrestClient.js.map","\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PostgrestError = exports.PostgrestBuilder = exports.PostgrestTransformBuilder = exports.PostgrestFilterBuilder = exports.PostgrestQueryBuilder = exports.PostgrestClient = void 0;\n// Always update wrapper.mjs when updating this file.\nconst PostgrestClient_1 = __importDefault(require(\"./PostgrestClient\"));\nexports.PostgrestClient = PostgrestClient_1.default;\nconst PostgrestQueryBuilder_1 = __importDefault(require(\"./PostgrestQueryBuilder\"));\nexports.PostgrestQueryBuilder = PostgrestQueryBuilder_1.default;\nconst PostgrestFilterBuilder_1 = __importDefault(require(\"./PostgrestFilterBuilder\"));\nexports.PostgrestFilterBuilder = PostgrestFilterBuilder_1.default;\nconst PostgrestTransformBuilder_1 = __importDefault(require(\"./PostgrestTransformBuilder\"));\nexports.PostgrestTransformBuilder = PostgrestTransformBuilder_1.default;\nconst PostgrestBuilder_1 = __importDefault(require(\"./PostgrestBuilder\"));\nexports.PostgrestBuilder = PostgrestBuilder_1.default;\nconst PostgrestError_1 = __importDefault(require(\"./PostgrestError\"));\nexports.PostgrestError = PostgrestError_1.default;\nexports.default = {\n PostgrestClient: PostgrestClient_1.default,\n PostgrestQueryBuilder: PostgrestQueryBuilder_1.default,\n PostgrestFilterBuilder: PostgrestFilterBuilder_1.default,\n PostgrestTransformBuilder: PostgrestTransformBuilder_1.default,\n PostgrestBuilder: PostgrestBuilder_1.default,\n PostgrestError: PostgrestError_1.default,\n};\n//# sourceMappingURL=index.js.map","import index from '../cjs/index.js'\nconst {\n PostgrestClient,\n PostgrestQueryBuilder,\n PostgrestFilterBuilder,\n PostgrestTransformBuilder,\n PostgrestBuilder,\n PostgrestError,\n} = index\n\nexport {\n PostgrestBuilder,\n PostgrestClient,\n PostgrestFilterBuilder,\n PostgrestQueryBuilder,\n PostgrestTransformBuilder,\n PostgrestError,\n}\n\n// compatibility with CJS output\nexport default {\n PostgrestClient,\n PostgrestQueryBuilder,\n PostgrestFilterBuilder,\n PostgrestTransformBuilder,\n PostgrestBuilder,\n PostgrestError,\n}\n","export const version = '2.11.2';\n//# sourceMappingURL=version.js.map","import { version } from './version';\nexport const DEFAULT_HEADERS = { 'X-Client-Info': `realtime-js/${version}` };\nexport const VSN = '1.0.0';\nexport const DEFAULT_TIMEOUT = 10000;\nexport const WS_CLOSE_NORMAL = 1000;\nexport var SOCKET_STATES;\n(function (SOCKET_STATES) {\n SOCKET_STATES[SOCKET_STATES[\"connecting\"] = 0] = \"connecting\";\n SOCKET_STATES[SOCKET_STATES[\"open\"] = 1] = \"open\";\n SOCKET_STATES[SOCKET_STATES[\"closing\"] = 2] = \"closing\";\n SOCKET_STATES[SOCKET_STATES[\"closed\"] = 3] = \"closed\";\n})(SOCKET_STATES || (SOCKET_STATES = {}));\nexport var CHANNEL_STATES;\n(function (CHANNEL_STATES) {\n CHANNEL_STATES[\"closed\"] = \"closed\";\n CHANNEL_STATES[\"errored\"] = \"errored\";\n CHANNEL_STATES[\"joined\"] = \"joined\";\n CHANNEL_STATES[\"joining\"] = \"joining\";\n CHANNEL_STATES[\"leaving\"] = \"leaving\";\n})(CHANNEL_STATES || (CHANNEL_STATES = {}));\nexport var CHANNEL_EVENTS;\n(function (CHANNEL_EVENTS) {\n CHANNEL_EVENTS[\"close\"] = \"phx_close\";\n CHANNEL_EVENTS[\"error\"] = \"phx_error\";\n CHANNEL_EVENTS[\"join\"] = \"phx_join\";\n CHANNEL_EVENTS[\"reply\"] = \"phx_reply\";\n CHANNEL_EVENTS[\"leave\"] = \"phx_leave\";\n CHANNEL_EVENTS[\"access_token\"] = \"access_token\";\n})(CHANNEL_EVENTS || (CHANNEL_EVENTS = {}));\nexport var TRANSPORTS;\n(function (TRANSPORTS) {\n TRANSPORTS[\"websocket\"] = \"websocket\";\n})(TRANSPORTS || (TRANSPORTS = {}));\nexport var CONNECTION_STATE;\n(function (CONNECTION_STATE) {\n CONNECTION_STATE[\"Connecting\"] = \"connecting\";\n CONNECTION_STATE[\"Open\"] = \"open\";\n CONNECTION_STATE[\"Closing\"] = \"closing\";\n CONNECTION_STATE[\"Closed\"] = \"closed\";\n})(CONNECTION_STATE || (CONNECTION_STATE = {}));\n//# sourceMappingURL=constants.js.map","// This file draws heavily from https://github.com/phoenixframework/phoenix/commit/cf098e9cf7a44ee6479d31d911a97d3c7430c6fe\n// License: https://github.com/phoenixframework/phoenix/blob/master/LICENSE.md\nexport default class Serializer {\n constructor() {\n this.HEADER_LENGTH = 1;\n }\n decode(rawPayload, callback) {\n if (rawPayload.constructor === ArrayBuffer) {\n return callback(this._binaryDecode(rawPayload));\n }\n if (typeof rawPayload === 'string') {\n return callback(JSON.parse(rawPayload));\n }\n return callback({});\n }\n _binaryDecode(buffer) {\n const view = new DataView(buffer);\n const decoder = new TextDecoder();\n return this._decodeBroadcast(buffer, view, decoder);\n }\n _decodeBroadcast(buffer, view, decoder) {\n const topicSize = view.getUint8(1);\n const eventSize = view.getUint8(2);\n let offset = this.HEADER_LENGTH + 2;\n const topic = decoder.decode(buffer.slice(offset, offset + topicSize));\n offset = offset + topicSize;\n const event = decoder.decode(buffer.slice(offset, offset + eventSize));\n offset = offset + eventSize;\n const data = JSON.parse(decoder.decode(buffer.slice(offset, buffer.byteLength)));\n return { ref: null, topic: topic, event: event, payload: data };\n }\n}\n//# sourceMappingURL=serializer.js.map","/**\n * Creates a timer that accepts a `timerCalc` function to perform calculated timeout retries, such as exponential backoff.\n *\n * @example\n * let reconnectTimer = new Timer(() => this.connect(), function(tries){\n * return [1000, 5000, 10000][tries - 1] || 10000\n * })\n * reconnectTimer.scheduleTimeout() // fires after 1000\n * reconnectTimer.scheduleTimeout() // fires after 5000\n * reconnectTimer.reset()\n * reconnectTimer.scheduleTimeout() // fires after 1000\n */\nexport default class Timer {\n constructor(callback, timerCalc) {\n this.callback = callback;\n this.timerCalc = timerCalc;\n this.timer = undefined;\n this.tries = 0;\n this.callback = callback;\n this.timerCalc = timerCalc;\n }\n reset() {\n this.tries = 0;\n clearTimeout(this.timer);\n }\n // Cancels any previous scheduleTimeout and schedules callback\n scheduleTimeout() {\n clearTimeout(this.timer);\n this.timer = setTimeout(() => {\n this.tries = this.tries + 1;\n this.callback();\n }, this.timerCalc(this.tries + 1));\n }\n}\n//# sourceMappingURL=timer.js.map","/**\n * Helpers to convert the change Payload into native JS types.\n */\n// Adapted from epgsql (src/epgsql_binary.erl), this module licensed under\n// 3-clause BSD found here: https://raw.githubusercontent.com/epgsql/epgsql/devel/LICENSE\nexport var PostgresTypes;\n(function (PostgresTypes) {\n PostgresTypes[\"abstime\"] = \"abstime\";\n PostgresTypes[\"bool\"] = \"bool\";\n PostgresTypes[\"date\"] = \"date\";\n PostgresTypes[\"daterange\"] = \"daterange\";\n PostgresTypes[\"float4\"] = \"float4\";\n PostgresTypes[\"float8\"] = \"float8\";\n PostgresTypes[\"int2\"] = \"int2\";\n PostgresTypes[\"int4\"] = \"int4\";\n PostgresTypes[\"int4range\"] = \"int4range\";\n PostgresTypes[\"int8\"] = \"int8\";\n PostgresTypes[\"int8range\"] = \"int8range\";\n PostgresTypes[\"json\"] = \"json\";\n PostgresTypes[\"jsonb\"] = \"jsonb\";\n PostgresTypes[\"money\"] = \"money\";\n PostgresTypes[\"numeric\"] = \"numeric\";\n PostgresTypes[\"oid\"] = \"oid\";\n PostgresTypes[\"reltime\"] = \"reltime\";\n PostgresTypes[\"text\"] = \"text\";\n PostgresTypes[\"time\"] = \"time\";\n PostgresTypes[\"timestamp\"] = \"timestamp\";\n PostgresTypes[\"timestamptz\"] = \"timestamptz\";\n PostgresTypes[\"timetz\"] = \"timetz\";\n PostgresTypes[\"tsrange\"] = \"tsrange\";\n PostgresTypes[\"tstzrange\"] = \"tstzrange\";\n})(PostgresTypes || (PostgresTypes = {}));\n/**\n * Takes an array of columns and an object of string values then converts each string value\n * to its mapped type.\n *\n * @param {{name: String, type: String}[]} columns\n * @param {Object} record\n * @param {Object} options The map of various options that can be applied to the mapper\n * @param {Array} options.skipTypes The array of types that should not be converted\n *\n * @example convertChangeData([{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age:'33'}, {})\n * //=>{ first_name: 'Paul', age: 33 }\n */\nexport const convertChangeData = (columns, record, options = {}) => {\n var _a;\n const skipTypes = (_a = options.skipTypes) !== null && _a !== void 0 ? _a : [];\n return Object.keys(record).reduce((acc, rec_key) => {\n acc[rec_key] = convertColumn(rec_key, columns, record, skipTypes);\n return acc;\n }, {});\n};\n/**\n * Converts the value of an individual column.\n *\n * @param {String} columnName The column that you want to convert\n * @param {{name: String, type: String}[]} columns All of the columns\n * @param {Object} record The map of string values\n * @param {Array} skipTypes An array of types that should not be converted\n * @return {object} Useless information\n *\n * @example convertColumn('age', [{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age: '33'}, [])\n * //=> 33\n * @example convertColumn('age', [{name: 'first_name', type: 'text'}, {name: 'age', type: 'int4'}], {first_name: 'Paul', age: '33'}, ['int4'])\n * //=> \"33\"\n */\nexport const convertColumn = (columnName, columns, record, skipTypes) => {\n const column = columns.find((x) => x.name === columnName);\n const colType = column === null || column === void 0 ? void 0 : column.type;\n const value = record[columnName];\n if (colType && !skipTypes.includes(colType)) {\n return convertCell(colType, value);\n }\n return noop(value);\n};\n/**\n * If the value of the cell is `null`, returns null.\n * Otherwise converts the string value to the correct type.\n * @param {String} type A postgres column type\n * @param {String} value The cell value\n *\n * @example convertCell('bool', 't')\n * //=> true\n * @example convertCell('int8', '10')\n * //=> 10\n * @example convertCell('_int4', '{1,2,3,4}')\n * //=> [1,2,3,4]\n */\nexport const convertCell = (type, value) => {\n // if data type is an array\n if (type.charAt(0) === '_') {\n const dataType = type.slice(1, type.length);\n return toArray(value, dataType);\n }\n // If not null, convert to correct type.\n switch (type) {\n case PostgresTypes.bool:\n return toBoolean(value);\n case PostgresTypes.float4:\n case PostgresTypes.float8:\n case PostgresTypes.int2:\n case PostgresTypes.int4:\n case PostgresTypes.int8:\n case PostgresTypes.numeric:\n case PostgresTypes.oid:\n return toNumber(value);\n case PostgresTypes.json:\n case PostgresTypes.jsonb:\n return toJson(value);\n case PostgresTypes.timestamp:\n return toTimestampString(value); // Format to be consistent with PostgREST\n case PostgresTypes.abstime: // To allow users to cast it based on Timezone\n case PostgresTypes.date: // To allow users to cast it based on Timezone\n case PostgresTypes.daterange:\n case PostgresTypes.int4range:\n case PostgresTypes.int8range:\n case PostgresTypes.money:\n case PostgresTypes.reltime: // To allow users to cast it based on Timezone\n case PostgresTypes.text:\n case PostgresTypes.time: // To allow users to cast it based on Timezone\n case PostgresTypes.timestamptz: // To allow users to cast it based on Timezone\n case PostgresTypes.timetz: // To allow users to cast it based on Timezone\n case PostgresTypes.tsrange:\n case PostgresTypes.tstzrange:\n return noop(value);\n default:\n // Return the value for remaining types\n return noop(value);\n }\n};\nconst noop = (value) => {\n return value;\n};\nexport const toBoolean = (value) => {\n switch (value) {\n case 't':\n return true;\n case 'f':\n return false;\n default:\n return value;\n }\n};\nexport const toNumber = (value) => {\n if (typeof value === 'string') {\n const parsedValue = parseFloat(value);\n if (!Number.isNaN(parsedValue)) {\n return parsedValue;\n }\n }\n return value;\n};\nexport const toJson = (value) => {\n if (typeof value === 'string') {\n try {\n return JSON.parse(value);\n }\n catch (error) {\n console.log(`JSON parse error: ${error}`);\n return value;\n }\n }\n return value;\n};\n/**\n * Converts a Postgres Array into a native JS array\n *\n * @example toArray('{}', 'int4')\n * //=> []\n * @example toArray('{\"[2021-01-01,2021-12-31)\",\"(2021-01-01,2021-12-32]\"}', 'daterange')\n * //=> ['[2021-01-01,2021-12-31)', '(2021-01-01,2021-12-32]']\n * @example toArray([1,2,3,4], 'int4')\n * //=> [1,2,3,4]\n */\nexport const toArray = (value, type) => {\n if (typeof value !== 'string') {\n return value;\n }\n const lastIdx = value.length - 1;\n const closeBrace = value[lastIdx];\n const openBrace = value[0];\n // Confirm value is a Postgres array by checking curly brackets\n if (openBrace === '{' && closeBrace === '}') {\n let arr;\n const valTrim = value.slice(1, lastIdx);\n // TODO: find a better solution to separate Postgres array data\n try {\n arr = JSON.parse('[' + valTrim + ']');\n }\n catch (_) {\n // WARNING: splitting on comma does not cover all edge cases\n arr = valTrim ? valTrim.split(',') : [];\n }\n return arr.map((val) => convertCell(type, val));\n }\n return value;\n};\n/**\n * Fixes timestamp to be ISO-8601. Swaps the space between the date and time for a 'T'\n * See https://github.com/supabase/supabase/issues/18\n *\n * @example toTimestampString('2019-09-10 00:00:00')\n * //=> '2019-09-10T00:00:00'\n */\nexport const toTimestampString = (value) => {\n if (typeof value === 'string') {\n return value.replace(' ', 'T');\n }\n return value;\n};\nexport const httpEndpointURL = (socketUrl) => {\n let url = socketUrl;\n url = url.replace(/^ws/i, 'http');\n url = url.replace(/(\\/socket\\/websocket|\\/socket|\\/websocket)\\/?$/i, '');\n return url.replace(/\\/+$/, '');\n};\n//# sourceMappingURL=transformers.js.map","import { DEFAULT_TIMEOUT } from '../lib/constants';\nexport default class Push {\n /**\n * Initializes the Push\n *\n * @param channel The Channel\n * @param event The event, for example `\"phx_join\"`\n * @param payload The payload, for example `{user_id: 123}`\n * @param timeout The push timeout in milliseconds\n */\n constructor(channel, event, payload = {}, timeout = DEFAULT_TIMEOUT) {\n this.channel = channel;\n this.event = event;\n this.payload = payload;\n this.timeout = timeout;\n this.sent = false;\n this.timeoutTimer = undefined;\n this.ref = '';\n this.receivedResp = null;\n this.recHooks = [];\n this.refEvent = null;\n }\n resend(timeout) {\n this.timeout = timeout;\n this._cancelRefEvent();\n this.ref = '';\n this.refEvent = null;\n this.receivedResp = null;\n this.sent = false;\n this.send();\n }\n send() {\n if (this._hasReceived('timeout')) {\n return;\n }\n this.startTimeout();\n this.sent = true;\n this.channel.socket.push({\n topic: this.channel.topic,\n event: this.event,\n payload: this.payload,\n ref: this.ref,\n join_ref: this.channel._joinRef(),\n });\n }\n updatePayload(payload) {\n this.payload = Object.assign(Object.assign({}, this.payload), payload);\n }\n receive(status, callback) {\n var _a;\n if (this._hasReceived(status)) {\n callback((_a = this.receivedResp) === null || _a === void 0 ? void 0 : _a.response);\n }\n this.recHooks.push({ status, callback });\n return this;\n }\n startTimeout() {\n if (this.timeoutTimer) {\n return;\n }\n this.ref = this.channel.socket._makeRef();\n this.refEvent = this.channel._replyEventName(this.ref);\n const callback = (payload) => {\n this._cancelRefEvent();\n this._cancelTimeout();\n this.receivedResp = payload;\n this._matchReceive(payload);\n };\n this.channel._on(this.refEvent, {}, callback);\n this.timeoutTimer = setTimeout(() => {\n this.trigger('timeout', {});\n }, this.timeout);\n }\n trigger(status, response) {\n if (this.refEvent)\n this.channel._trigger(this.refEvent, { status, response });\n }\n destroy() {\n this._cancelRefEvent();\n this._cancelTimeout();\n }\n _cancelRefEvent() {\n if (!this.refEvent) {\n return;\n }\n this.channel._off(this.refEvent, {});\n }\n _cancelTimeout() {\n clearTimeout(this.timeoutTimer);\n this.timeoutTimer = undefined;\n }\n _matchReceive({ status, response, }) {\n this.recHooks\n .filter((h) => h.status === status)\n .forEach((h) => h.callback(response));\n }\n _hasReceived(status) {\n return this.receivedResp && this.receivedResp.status === status;\n }\n}\n//# sourceMappingURL=push.js.map","/*\n This file draws heavily from https://github.com/phoenixframework/phoenix/blob/d344ec0a732ab4ee204215b31de69cf4be72e3bf/assets/js/phoenix/presence.js\n License: https://github.com/phoenixframework/phoenix/blob/d344ec0a732ab4ee204215b31de69cf4be72e3bf/LICENSE.md\n*/\nexport var REALTIME_PRESENCE_LISTEN_EVENTS;\n(function (REALTIME_PRESENCE_LISTEN_EVENTS) {\n REALTIME_PRESENCE_LISTEN_EVENTS[\"SYNC\"] = \"sync\";\n REALTIME_PRESENCE_LISTEN_EVENTS[\"JOIN\"] = \"join\";\n REALTIME_PRESENCE_LISTEN_EVENTS[\"LEAVE\"] = \"leave\";\n})(REALTIME_PRESENCE_LISTEN_EVENTS || (REALTIME_PRESENCE_LISTEN_EVENTS = {}));\nexport default class RealtimePresence {\n /**\n * Initializes the Presence.\n *\n * @param channel - The RealtimeChannel\n * @param opts - The options,\n * for example `{events: {state: 'state', diff: 'diff'}}`\n */\n constructor(channel, opts) {\n this.channel = channel;\n this.state = {};\n this.pendingDiffs = [];\n this.joinRef = null;\n this.caller = {\n onJoin: () => { },\n onLeave: () => { },\n onSync: () => { },\n };\n const events = (opts === null || opts === void 0 ? void 0 : opts.events) || {\n state: 'presence_state',\n diff: 'presence_diff',\n };\n this.channel._on(events.state, {}, (newState) => {\n const { onJoin, onLeave, onSync } = this.caller;\n this.joinRef = this.channel._joinRef();\n this.state = RealtimePresence.syncState(this.state, newState, onJoin, onLeave);\n this.pendingDiffs.forEach((diff) => {\n this.state = RealtimePresence.syncDiff(this.state, diff, onJoin, onLeave);\n });\n this.pendingDiffs = [];\n onSync();\n });\n this.channel._on(events.diff, {}, (diff) => {\n const { onJoin, onLeave, onSync } = this.caller;\n if (this.inPendingSyncState()) {\n this.pendingDiffs.push(diff);\n }\n else {\n this.state = RealtimePresence.syncDiff(this.state, diff, onJoin, onLeave);\n onSync();\n }\n });\n this.onJoin((key, currentPresences, newPresences) => {\n this.channel._trigger('presence', {\n event: 'join',\n key,\n currentPresences,\n newPresences,\n });\n });\n this.onLeave((key, currentPresences, leftPresences) => {\n this.channel._trigger('presence', {\n event: 'leave',\n key,\n currentPresences,\n leftPresences,\n });\n });\n this.onSync(() => {\n this.channel._trigger('presence', { event: 'sync' });\n });\n }\n /**\n * Used to sync the list of presences on the server with the\n * client's state.\n *\n * An optional `onJoin` and `onLeave` callback can be provided to\n * react to changes in the client's local presences across\n * disconnects and reconnects with the server.\n *\n * @internal\n */\n static syncState(currentState, newState, onJoin, onLeave) {\n const state = this.cloneDeep(currentState);\n const transformedState = this.transformState(newState);\n const joins = {};\n const leaves = {};\n this.map(state, (key, presences) => {\n if (!transformedState[key]) {\n leaves[key] = presences;\n }\n });\n this.map(transformedState, (key, newPresences) => {\n const currentPresences = state[key];\n if (currentPresences) {\n const newPresenceRefs = newPresences.map((m) => m.presence_ref);\n const curPresenceRefs = currentPresences.map((m) => m.presence_ref);\n const joinedPresences = newPresences.filter((m) => curPresenceRefs.indexOf(m.presence_ref) < 0);\n const leftPresences = currentPresences.filter((m) => newPresenceRefs.indexOf(m.presence_ref) < 0);\n if (joinedPresences.length > 0) {\n joins[key] = joinedPresences;\n }\n if (leftPresences.length > 0) {\n leaves[key] = leftPresences;\n }\n }\n else {\n joins[key] = newPresences;\n }\n });\n return this.syncDiff(state, { joins, leaves }, onJoin, onLeave);\n }\n /**\n * Used to sync a diff of presence join and leave events from the\n * server, as they happen.\n *\n * Like `syncState`, `syncDiff` accepts optional `onJoin` and\n * `onLeave` callbacks to react to a user joining or leaving from a\n * device.\n *\n * @internal\n */\n static syncDiff(state, diff, onJoin, onLeave) {\n const { joins, leaves } = {\n joins: this.transformState(diff.joins),\n leaves: this.transformState(diff.leaves),\n };\n if (!onJoin) {\n onJoin = () => { };\n }\n if (!onLeave) {\n onLeave = () => { };\n }\n this.map(joins, (key, newPresences) => {\n var _a;\n const currentPresences = (_a = state[key]) !== null && _a !== void 0 ? _a : [];\n state[key] = this.cloneDeep(newPresences);\n if (currentPresences.length > 0) {\n const joinedPresenceRefs = state[key].map((m) => m.presence_ref);\n const curPresences = currentPresences.filter((m) => joinedPresenceRefs.indexOf(m.presence_ref) < 0);\n state[key].unshift(...curPresences);\n }\n onJoin(key, currentPresences, newPresences);\n });\n this.map(leaves, (key, leftPresences) => {\n let currentPresences = state[key];\n if (!currentPresences)\n return;\n const presenceRefsToRemove = leftPresences.map((m) => m.presence_ref);\n currentPresences = currentPresences.filter((m) => presenceRefsToRemove.indexOf(m.presence_ref) < 0);\n state[key] = currentPresences;\n onLeave(key, currentPresences, leftPresences);\n if (currentPresences.length === 0)\n delete state[key];\n });\n return state;\n }\n /** @internal */\n static map(obj, func) {\n return Object.getOwnPropertyNames(obj).map((key) => func(key, obj[key]));\n }\n /**\n * Remove 'metas' key\n * Change 'phx_ref' to 'presence_ref'\n * Remove 'phx_ref' and 'phx_ref_prev'\n *\n * @example\n * // returns {\n * abc123: [\n * { presence_ref: '2', user_id: 1 },\n * { presence_ref: '3', user_id: 2 }\n * ]\n * }\n * RealtimePresence.transformState({\n * abc123: {\n * metas: [\n * { phx_ref: '2', phx_ref_prev: '1' user_id: 1 },\n * { phx_ref: '3', user_id: 2 }\n * ]\n * }\n * })\n *\n * @internal\n */\n static transformState(state) {\n state = this.cloneDeep(state);\n return Object.getOwnPropertyNames(state).reduce((newState, key) => {\n const presences = state[key];\n if ('metas' in presences) {\n newState[key] = presences.metas.map((presence) => {\n presence['presence_ref'] = presence['phx_ref'];\n delete presence['phx_ref'];\n delete presence['phx_ref_prev'];\n return presence;\n });\n }\n else {\n newState[key] = presences;\n }\n return newState;\n }, {});\n }\n /** @internal */\n static cloneDeep(obj) {\n return JSON.parse(JSON.stringify(obj));\n }\n /** @internal */\n onJoin(callback) {\n this.caller.onJoin = callback;\n }\n /** @internal */\n onLeave(callback) {\n this.caller.onLeave = callback;\n }\n /** @internal */\n onSync(callback) {\n this.caller.onSync = callback;\n }\n /** @internal */\n inPendingSyncState() {\n return !this.joinRef || this.joinRef !== this.channel._joinRef();\n }\n}\n//# sourceMappingURL=RealtimePresence.js.map","import { CHANNEL_EVENTS, CHANNEL_STATES } from './lib/constants';\nimport Push from './lib/push';\nimport Timer from './lib/timer';\nimport RealtimePresence from './RealtimePresence';\nimport * as Transformers from './lib/transformers';\nimport { httpEndpointURL } from './lib/transformers';\nexport var REALTIME_POSTGRES_CHANGES_LISTEN_EVENT;\n(function (REALTIME_POSTGRES_CHANGES_LISTEN_EVENT) {\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"ALL\"] = \"*\";\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"INSERT\"] = \"INSERT\";\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"UPDATE\"] = \"UPDATE\";\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT[\"DELETE\"] = \"DELETE\";\n})(REALTIME_POSTGRES_CHANGES_LISTEN_EVENT || (REALTIME_POSTGRES_CHANGES_LISTEN_EVENT = {}));\nexport var REALTIME_LISTEN_TYPES;\n(function (REALTIME_LISTEN_TYPES) {\n REALTIME_LISTEN_TYPES[\"BROADCAST\"] = \"broadcast\";\n REALTIME_LISTEN_TYPES[\"PRESENCE\"] = \"presence\";\n REALTIME_LISTEN_TYPES[\"POSTGRES_CHANGES\"] = \"postgres_changes\";\n REALTIME_LISTEN_TYPES[\"SYSTEM\"] = \"system\";\n})(REALTIME_LISTEN_TYPES || (REALTIME_LISTEN_TYPES = {}));\nexport var REALTIME_SUBSCRIBE_STATES;\n(function (REALTIME_SUBSCRIBE_STATES) {\n REALTIME_SUBSCRIBE_STATES[\"SUBSCRIBED\"] = \"SUBSCRIBED\";\n REALTIME_SUBSCRIBE_STATES[\"TIMED_OUT\"] = \"TIMED_OUT\";\n REALTIME_SUBSCRIBE_STATES[\"CLOSED\"] = \"CLOSED\";\n REALTIME_SUBSCRIBE_STATES[\"CHANNEL_ERROR\"] = \"CHANNEL_ERROR\";\n})(REALTIME_SUBSCRIBE_STATES || (REALTIME_SUBSCRIBE_STATES = {}));\nexport const REALTIME_CHANNEL_STATES = CHANNEL_STATES;\n/** A channel is the basic building block of Realtime\n * and narrows the scope of data flow to subscribed clients.\n * You can think of a channel as a chatroom where participants are able to see who's online\n * and send and receive messages.\n */\nexport default class RealtimeChannel {\n constructor(\n /** Topic name can be any string. */\n topic, params = { config: {} }, socket) {\n this.topic = topic;\n this.params = params;\n this.socket = socket;\n this.bindings = {};\n this.state = CHANNEL_STATES.closed;\n this.joinedOnce = false;\n this.pushBuffer = [];\n this.subTopic = topic.replace(/^realtime:/i, '');\n this.params.config = Object.assign({\n broadcast: { ack: false, self: false },\n presence: { key: '' },\n private: false,\n }, params.config);\n this.timeout = this.socket.timeout;\n this.joinPush = new Push(this, CHANNEL_EVENTS.join, this.params, this.timeout);\n this.rejoinTimer = new Timer(() => this._rejoinUntilConnected(), this.socket.reconnectAfterMs);\n this.joinPush.receive('ok', () => {\n this.state = CHANNEL_STATES.joined;\n this.rejoinTimer.reset();\n this.pushBuffer.forEach((pushEvent) => pushEvent.send());\n this.pushBuffer = [];\n });\n this._onClose(() => {\n this.rejoinTimer.reset();\n this.socket.log('channel', `close ${this.topic} ${this._joinRef()}`);\n this.state = CHANNEL_STATES.closed;\n this.socket._remove(this);\n });\n this._onError((reason) => {\n if (this._isLeaving() || this._isClosed()) {\n return;\n }\n this.socket.log('channel', `error ${this.topic}`, reason);\n this.state = CHANNEL_STATES.errored;\n this.rejoinTimer.scheduleTimeout();\n });\n this.joinPush.receive('timeout', () => {\n if (!this._isJoining()) {\n return;\n }\n this.socket.log('channel', `timeout ${this.topic}`, this.joinPush.timeout);\n this.state = CHANNEL_STATES.errored;\n this.rejoinTimer.scheduleTimeout();\n });\n this._on(CHANNEL_EVENTS.reply, {}, (payload, ref) => {\n this._trigger(this._replyEventName(ref), payload);\n });\n this.presence = new RealtimePresence(this);\n this.broadcastEndpointURL =\n httpEndpointURL(this.socket.endPoint) + '/api/broadcast';\n this.private = this.params.config.private || false;\n }\n /** Subscribe registers your client with the server */\n subscribe(callback, timeout = this.timeout) {\n var _a, _b;\n if (!this.socket.isConnected()) {\n this.socket.connect();\n }\n if (this.joinedOnce) {\n throw `tried to subscribe multiple times. 'subscribe' can only be called a single time per channel instance`;\n }\n else {\n const { config: { broadcast, presence, private: isPrivate }, } = this.params;\n this._onError((e) => callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, e));\n this._onClose(() => callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CLOSED));\n const accessTokenPayload = {};\n const config = {\n broadcast,\n presence,\n postgres_changes: (_b = (_a = this.bindings.postgres_changes) === null || _a === void 0 ? void 0 : _a.map((r) => r.filter)) !== null && _b !== void 0 ? _b : [],\n private: isPrivate,\n };\n if (this.socket.accessTokenValue) {\n accessTokenPayload.access_token = this.socket.accessTokenValue;\n }\n this.updateJoinPayload(Object.assign({ config }, accessTokenPayload));\n this.joinedOnce = true;\n this._rejoin(timeout);\n this.joinPush\n .receive('ok', async ({ postgres_changes }) => {\n var _a;\n this.socket.setAuth();\n if (postgres_changes === undefined) {\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED);\n return;\n }\n else {\n const clientPostgresBindings = this.bindings.postgres_changes;\n const bindingsLen = (_a = clientPostgresBindings === null || clientPostgresBindings === void 0 ? void 0 : clientPostgresBindings.length) !== null && _a !== void 0 ? _a : 0;\n const newPostgresBindings = [];\n for (let i = 0; i < bindingsLen; i++) {\n const clientPostgresBinding = clientPostgresBindings[i];\n const { filter: { event, schema, table, filter }, } = clientPostgresBinding;\n const serverPostgresFilter = postgres_changes && postgres_changes[i];\n if (serverPostgresFilter &&\n serverPostgresFilter.event === event &&\n serverPostgresFilter.schema === schema &&\n serverPostgresFilter.table === table &&\n serverPostgresFilter.filter === filter) {\n newPostgresBindings.push(Object.assign(Object.assign({}, clientPostgresBinding), { id: serverPostgresFilter.id }));\n }\n else {\n this.unsubscribe();\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, new Error('mismatch between server and client bindings for postgres changes'));\n return;\n }\n }\n this.bindings.postgres_changes = newPostgresBindings;\n callback && callback(REALTIME_SUBSCRIBE_STATES.SUBSCRIBED);\n return;\n }\n })\n .receive('error', (error) => {\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.CHANNEL_ERROR, new Error(JSON.stringify(Object.values(error).join(', ') || 'error')));\n return;\n })\n .receive('timeout', () => {\n callback === null || callback === void 0 ? void 0 : callback(REALTIME_SUBSCRIBE_STATES.TIMED_OUT);\n return;\n });\n }\n return this;\n }\n presenceState() {\n return this.presence.state;\n }\n async track(payload, opts = {}) {\n return await this.send({\n type: 'presence',\n event: 'track',\n payload,\n }, opts.timeout || this.timeout);\n }\n async untrack(opts = {}) {\n return await this.send({\n type: 'presence',\n event: 'untrack',\n }, opts);\n }\n on(type, filter, callback) {\n return this._on(type, filter, callback);\n }\n /**\n * Sends a message into the channel.\n *\n * @param args Arguments to send to channel\n * @param args.type The type of event to send\n * @param args.event The name of the event being sent\n * @param args.payload Payload to be sent\n * @param opts Options to be used during the send process\n */\n async send(args, opts = {}) {\n var _a, _b;\n if (!this._canPush() && args.type === 'broadcast') {\n const { event, payload: endpoint_payload } = args;\n const authorization = this.socket.accessTokenValue\n ? `Bearer ${this.socket.accessTokenValue}`\n : '';\n const options = {\n method: 'POST',\n headers: {\n Authorization: authorization,\n apikey: this.socket.apiKey ? this.socket.apiKey : '',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n messages: [\n {\n topic: this.subTopic,\n event,\n payload: endpoint_payload,\n private: this.private,\n },\n ],\n }),\n };\n try {\n const response = await this._fetchWithTimeout(this.broadcastEndpointURL, options, (_a = opts.timeout) !== null && _a !== void 0 ? _a : this.timeout);\n await ((_b = response.body) === null || _b === void 0 ? void 0 : _b.cancel());\n return response.ok ? 'ok' : 'error';\n }\n catch (error) {\n if (error.name === 'AbortError') {\n return 'timed out';\n }\n else {\n return 'error';\n }\n }\n }\n else {\n return new Promise((resolve) => {\n var _a, _b, _c;\n const push = this._push(args.type, args, opts.timeout || this.timeout);\n if (args.type === 'broadcast' && !((_c = (_b = (_a = this.params) === null || _a === void 0 ? void 0 : _a.config) === null || _b === void 0 ? void 0 : _b.broadcast) === null || _c === void 0 ? void 0 : _c.ack)) {\n resolve('ok');\n }\n push.receive('ok', () => resolve('ok'));\n push.receive('error', () => resolve('error'));\n push.receive('timeout', () => resolve('timed out'));\n });\n }\n }\n updateJoinPayload(payload) {\n this.joinPush.updatePayload(payload);\n }\n /**\n * Leaves the channel.\n *\n * Unsubscribes from server events, and instructs channel to terminate on server.\n * Triggers onClose() hooks.\n *\n * To receive leave acknowledgements, use the a `receive` hook to bind to the server ack, ie:\n * channel.unsubscribe().receive(\"ok\", () => alert(\"left!\") )\n */\n unsubscribe(timeout = this.timeout) {\n this.state = CHANNEL_STATES.leaving;\n const onClose = () => {\n this.socket.log('channel', `leave ${this.topic}`);\n this._trigger(CHANNEL_EVENTS.close, 'leave', this._joinRef());\n };\n this.rejoinTimer.reset();\n // Destroy joinPush to avoid connection timeouts during unscription phase\n this.joinPush.destroy();\n return new Promise((resolve) => {\n const leavePush = new Push(this, CHANNEL_EVENTS.leave, {}, timeout);\n leavePush\n .receive('ok', () => {\n onClose();\n resolve('ok');\n })\n .receive('timeout', () => {\n onClose();\n resolve('timed out');\n })\n .receive('error', () => {\n resolve('error');\n });\n leavePush.send();\n if (!this._canPush()) {\n leavePush.trigger('ok', {});\n }\n });\n }\n /** @internal */\n async _fetchWithTimeout(url, options, timeout) {\n const controller = new AbortController();\n const id = setTimeout(() => controller.abort(), timeout);\n const response = await this.socket.fetch(url, Object.assign(Object.assign({}, options), { signal: controller.signal }));\n clearTimeout(id);\n return response;\n }\n /** @internal */\n _push(event, payload, timeout = this.timeout) {\n if (!this.joinedOnce) {\n throw `tried to push '${event}' to '${this.topic}' before joining. Use channel.subscribe() before pushing events`;\n }\n let pushEvent = new Push(this, event, payload, timeout);\n if (this._canPush()) {\n pushEvent.send();\n }\n else {\n pushEvent.startTimeout();\n this.pushBuffer.push(pushEvent);\n }\n return pushEvent;\n }\n /**\n * Overridable message hook\n *\n * Receives all events for specialized message handling before dispatching to the channel callbacks.\n * Must return the payload, modified or unmodified.\n *\n * @internal\n */\n _onMessage(_event, payload, _ref) {\n return payload;\n }\n /** @internal */\n _isMember(topic) {\n return this.topic === topic;\n }\n /** @internal */\n _joinRef() {\n return this.joinPush.ref;\n }\n /** @internal */\n _trigger(type, payload, ref) {\n var _a, _b;\n const typeLower = type.toLocaleLowerCase();\n const { close, error, leave, join } = CHANNEL_EVENTS;\n const events = [close, error, leave, join];\n if (ref && events.indexOf(typeLower) >= 0 && ref !== this._joinRef()) {\n return;\n }\n let handledPayload = this._onMessage(typeLower, payload, ref);\n if (payload && !handledPayload) {\n throw 'channel onMessage callbacks must return the payload, modified or unmodified';\n }\n if (['insert', 'update', 'delete'].includes(typeLower)) {\n (_a = this.bindings.postgres_changes) === null || _a === void 0 ? void 0 : _a.filter((bind) => {\n var _a, _b, _c;\n return (((_a = bind.filter) === null || _a === void 0 ? void 0 : _a.event) === '*' ||\n ((_c = (_b = bind.filter) === null || _b === void 0 ? void 0 : _b.event) === null || _c === void 0 ? void 0 : _c.toLocaleLowerCase()) === typeLower);\n }).map((bind) => bind.callback(handledPayload, ref));\n }\n else {\n (_b = this.bindings[typeLower]) === null || _b === void 0 ? void 0 : _b.filter((bind) => {\n var _a, _b, _c, _d, _e, _f;\n if (['broadcast', 'presence', 'postgres_changes'].includes(typeLower)) {\n if ('id' in bind) {\n const bindId = bind.id;\n const bindEvent = (_a = bind.filter) === null || _a === void 0 ? void 0 : _a.event;\n return (bindId &&\n ((_b = payload.ids) === null || _b === void 0 ? void 0 : _b.includes(bindId)) &&\n (bindEvent === '*' ||\n (bindEvent === null || bindEvent === void 0 ? void 0 : bindEvent.toLocaleLowerCase()) ===\n ((_c = payload.data) === null || _c === void 0 ? void 0 : _c.type.toLocaleLowerCase())));\n }\n else {\n const bindEvent = (_e = (_d = bind === null || bind === void 0 ? void 0 : bind.filter) === null || _d === void 0 ? void 0 : _d.event) === null || _e === void 0 ? void 0 : _e.toLocaleLowerCase();\n return (bindEvent === '*' ||\n bindEvent === ((_f = payload === null || payload === void 0 ? void 0 : payload.event) === null || _f === void 0 ? void 0 : _f.toLocaleLowerCase()));\n }\n }\n else {\n return bind.type.toLocaleLowerCase() === typeLower;\n }\n }).map((bind) => {\n if (typeof handledPayload === 'object' && 'ids' in handledPayload) {\n const postgresChanges = handledPayload.data;\n const { schema, table, commit_timestamp, type, errors } = postgresChanges;\n const enrichedPayload = {\n schema: schema,\n table: table,\n commit_timestamp: commit_timestamp,\n eventType: type,\n new: {},\n old: {},\n errors: errors,\n };\n handledPayload = Object.assign(Object.assign({}, enrichedPayload), this._getPayloadRecords(postgresChanges));\n }\n bind.callback(handledPayload, ref);\n });\n }\n }\n /** @internal */\n _isClosed() {\n return this.state === CHANNEL_STATES.closed;\n }\n /** @internal */\n _isJoined() {\n return this.state === CHANNEL_STATES.joined;\n }\n /** @internal */\n _isJoining() {\n return this.state === CHANNEL_STATES.joining;\n }\n /** @internal */\n _isLeaving() {\n return this.state === CHANNEL_STATES.leaving;\n }\n /** @internal */\n _replyEventName(ref) {\n return `chan_reply_${ref}`;\n }\n /** @internal */\n _on(type, filter, callback) {\n const typeLower = type.toLocaleLowerCase();\n const binding = {\n type: typeLower,\n filter: filter,\n callback: callback,\n };\n if (this.bindings[typeLower]) {\n this.bindings[typeLower].push(binding);\n }\n else {\n this.bindings[typeLower] = [binding];\n }\n return this;\n }\n /** @internal */\n _off(type, filter) {\n const typeLower = type.toLocaleLowerCase();\n this.bindings[typeLower] = this.bindings[typeLower].filter((bind) => {\n var _a;\n return !(((_a = bind.type) === null || _a === void 0 ? void 0 : _a.toLocaleLowerCase()) === typeLower &&\n RealtimeChannel.isEqual(bind.filter, filter));\n });\n return this;\n }\n /** @internal */\n static isEqual(obj1, obj2) {\n if (Object.keys(obj1).length !== Object.keys(obj2).length) {\n return false;\n }\n for (const k in obj1) {\n if (obj1[k] !== obj2[k]) {\n return false;\n }\n }\n return true;\n }\n /** @internal */\n _rejoinUntilConnected() {\n this.rejoinTimer.scheduleTimeout();\n if (this.socket.isConnected()) {\n this._rejoin();\n }\n }\n /**\n * Registers a callback that will be executed when the channel closes.\n *\n * @internal\n */\n _onClose(callback) {\n this._on(CHANNEL_EVENTS.close, {}, callback);\n }\n /**\n * Registers a callback that will be executed when the channel encounteres an error.\n *\n * @internal\n */\n _onError(callback) {\n this._on(CHANNEL_EVENTS.error, {}, (reason) => callback(reason));\n }\n /**\n * Returns `true` if the socket is connected and the channel has been joined.\n *\n * @internal\n */\n _canPush() {\n return this.socket.isConnected() && this._isJoined();\n }\n /** @internal */\n _rejoin(timeout = this.timeout) {\n if (this._isLeaving()) {\n return;\n }\n this.socket._leaveOpenTopic(this.topic);\n this.state = CHANNEL_STATES.joining;\n this.joinPush.resend(timeout);\n }\n /** @internal */\n _getPayloadRecords(payload) {\n const records = {\n new: {},\n old: {},\n };\n if (payload.type === 'INSERT' || payload.type === 'UPDATE') {\n records.new = Transformers.convertChangeData(payload.columns, payload.record);\n }\n if (payload.type === 'UPDATE' || payload.type === 'DELETE') {\n records.old = Transformers.convertChangeData(payload.columns, payload.old_record);\n }\n return records;\n }\n}\n//# sourceMappingURL=RealtimeChannel.js.map","import { CHANNEL_EVENTS, CONNECTION_STATE, DEFAULT_HEADERS, DEFAULT_TIMEOUT, SOCKET_STATES, TRANSPORTS, VSN, WS_CLOSE_NORMAL, } from './lib/constants';\nimport Serializer from './lib/serializer';\nimport Timer from './lib/timer';\nimport { httpEndpointURL } from './lib/transformers';\nimport RealtimeChannel from './RealtimeChannel';\nconst noop = () => { };\nconst NATIVE_WEBSOCKET_AVAILABLE = typeof WebSocket !== 'undefined';\nconst WORKER_SCRIPT = `\n addEventListener(\"message\", (e) => {\n if (e.data.event === \"start\") {\n setInterval(() => postMessage({ event: \"keepAlive\" }), e.data.interval);\n }\n });`;\nexport default class RealtimeClient {\n /**\n * Initializes the Socket.\n *\n * @param endPoint The string WebSocket endpoint, ie, \"ws://example.com/socket\", \"wss://example.com\", \"/socket\" (inherited host & protocol)\n * @param httpEndpoint The string HTTP endpoint, ie, \"https://example.com\", \"/\" (inherited host & protocol)\n * @param options.transport The Websocket Transport, for example WebSocket.\n * @param options.timeout The default timeout in milliseconds to trigger push timeouts.\n * @param options.params The optional params to pass when connecting.\n * @param options.headers The optional headers to pass when connecting.\n * @param options.heartbeatIntervalMs The millisec interval to send a heartbeat message.\n * @param options.logger The optional function for specialized logging, ie: logger: (kind, msg, data) => { console.log(`${kind}: ${msg}`, data) }\n * @param options.encode The function to encode outgoing messages. Defaults to JSON: (payload, callback) => callback(JSON.stringify(payload))\n * @param options.decode The function to decode incoming messages. Defaults to Serializer's decode.\n * @param options.reconnectAfterMs he optional function that returns the millsec reconnect interval. Defaults to stepped backoff off.\n * @param options.worker Use Web Worker to set a side flow. Defaults to false.\n * @param options.workerUrl The URL of the worker script. Defaults to https://realtime.supabase.com/worker.js that includes a heartbeat event call to keep the connection alive.\n */\n constructor(endPoint, options) {\n var _a;\n this.accessTokenValue = null;\n this.apiKey = null;\n this.channels = [];\n this.endPoint = '';\n this.httpEndpoint = '';\n this.headers = DEFAULT_HEADERS;\n this.params = {};\n this.timeout = DEFAULT_TIMEOUT;\n this.heartbeatIntervalMs = 30000;\n this.heartbeatTimer = undefined;\n this.pendingHeartbeatRef = null;\n this.ref = 0;\n this.logger = noop;\n this.conn = null;\n this.sendBuffer = [];\n this.serializer = new Serializer();\n this.stateChangeCallbacks = {\n open: [],\n close: [],\n error: [],\n message: [],\n };\n this.accessToken = null;\n /**\n * Use either custom fetch, if provided, or default fetch to make HTTP requests\n *\n * @internal\n */\n this._resolveFetch = (customFetch) => {\n let _fetch;\n if (customFetch) {\n _fetch = customFetch;\n }\n else if (typeof fetch === 'undefined') {\n _fetch = (...args) => import('@supabase/node-fetch').then(({ default: fetch }) => fetch(...args));\n }\n else {\n _fetch = fetch;\n }\n return (...args) => _fetch(...args);\n };\n this.endPoint = `${endPoint}/${TRANSPORTS.websocket}`;\n this.httpEndpoint = httpEndpointURL(endPoint);\n if (options === null || options === void 0 ? void 0 : options.transport) {\n this.transport = options.transport;\n }\n else {\n this.transport = null;\n }\n if (options === null || options === void 0 ? void 0 : options.params)\n this.params = options.params;\n if (options === null || options === void 0 ? void 0 : options.headers)\n this.headers = Object.assign(Object.assign({}, this.headers), options.headers);\n if (options === null || options === void 0 ? void 0 : options.timeout)\n this.timeout = options.timeout;\n if (options === null || options === void 0 ? void 0 : options.logger)\n this.logger = options.logger;\n if (options === null || options === void 0 ? void 0 : options.heartbeatIntervalMs)\n this.heartbeatIntervalMs = options.heartbeatIntervalMs;\n const accessTokenValue = (_a = options === null || options === void 0 ? void 0 : options.params) === null || _a === void 0 ? void 0 : _a.apikey;\n if (accessTokenValue) {\n this.accessTokenValue = accessTokenValue;\n this.apiKey = accessTokenValue;\n }\n this.reconnectAfterMs = (options === null || options === void 0 ? void 0 : options.reconnectAfterMs)\n ? options.reconnectAfterMs\n : (tries) => {\n return [1000, 2000, 5000, 10000][tries - 1] || 10000;\n };\n this.encode = (options === null || options === void 0 ? void 0 : options.encode)\n ? options.encode\n : (payload, callback) => {\n return callback(JSON.stringify(payload));\n };\n this.decode = (options === null || options === void 0 ? void 0 : options.decode)\n ? options.decode\n : this.serializer.decode.bind(this.serializer);\n this.reconnectTimer = new Timer(async () => {\n this.disconnect();\n this.connect();\n }, this.reconnectAfterMs);\n this.fetch = this._resolveFetch(options === null || options === void 0 ? void 0 : options.fetch);\n if (options === null || options === void 0 ? void 0 : options.worker) {\n if (typeof window !== 'undefined' && !window.Worker) {\n throw new Error('Web Worker is not supported');\n }\n this.worker = (options === null || options === void 0 ? void 0 : options.worker) || false;\n this.workerUrl = options === null || options === void 0 ? void 0 : options.workerUrl;\n }\n this.accessToken = (options === null || options === void 0 ? void 0 : options.accessToken) || null;\n }\n /**\n * Connects the socket, unless already connected.\n */\n connect() {\n if (this.conn) {\n return;\n }\n if (this.transport) {\n this.conn = new this.transport(this.endpointURL(), undefined, {\n headers: this.headers,\n });\n return;\n }\n if (NATIVE_WEBSOCKET_AVAILABLE) {\n this.conn = new WebSocket(this.endpointURL());\n this.setupConnection();\n return;\n }\n this.conn = new WSWebSocketDummy(this.endpointURL(), undefined, {\n close: () => {\n this.conn = null;\n },\n });\n import('ws').then(({ default: WS }) => {\n this.conn = new WS(this.endpointURL(), undefined, {\n headers: this.headers,\n });\n this.setupConnection();\n });\n }\n /**\n * Returns the URL of the websocket.\n * @returns string The URL of the websocket.\n */\n endpointURL() {\n return this._appendParams(this.endPoint, Object.assign({}, this.params, { vsn: VSN }));\n }\n /**\n * Disconnects the socket.\n *\n * @param code A numeric status code to send on disconnect.\n * @param reason A custom reason for the disconnect.\n */\n disconnect(code, reason) {\n if (this.conn) {\n this.conn.onclose = function () { }; // noop\n if (code) {\n this.conn.close(code, reason !== null && reason !== void 0 ? reason : '');\n }\n else {\n this.conn.close();\n }\n this.conn = null;\n // remove open handles\n this.heartbeatTimer && clearInterval(this.heartbeatTimer);\n this.reconnectTimer.reset();\n }\n }\n /**\n * Returns all created channels\n */\n getChannels() {\n return this.channels;\n }\n /**\n * Unsubscribes and removes a single channel\n * @param channel A RealtimeChannel instance\n */\n async removeChannel(channel) {\n const status = await channel.unsubscribe();\n if (this.channels.length === 0) {\n this.disconnect();\n }\n return status;\n }\n /**\n * Unsubscribes and removes all channels\n */\n async removeAllChannels() {\n const values_1 = await Promise.all(this.channels.map((channel) => channel.unsubscribe()));\n this.disconnect();\n return values_1;\n }\n /**\n * Logs the message.\n *\n * For customized logging, `this.logger` can be overridden.\n */\n log(kind, msg, data) {\n this.logger(kind, msg, data);\n }\n /**\n * Returns the current state of the socket.\n */\n connectionState() {\n switch (this.conn && this.conn.readyState) {\n case SOCKET_STATES.connecting:\n return CONNECTION_STATE.Connecting;\n case SOCKET_STATES.open:\n return CONNECTION_STATE.Open;\n case SOCKET_STATES.closing:\n return CONNECTION_STATE.Closing;\n default:\n return CONNECTION_STATE.Closed;\n }\n }\n /**\n * Returns `true` is the connection is open.\n */\n isConnected() {\n return this.connectionState() === CONNECTION_STATE.Open;\n }\n channel(topic, params = { config: {} }) {\n const chan = new RealtimeChannel(`realtime:${topic}`, params, this);\n this.channels.push(chan);\n return chan;\n }\n /**\n * Push out a message if the socket is connected.\n *\n * If the socket is not connected, the message gets enqueued within a local buffer, and sent out when a connection is next established.\n */\n push(data) {\n const { topic, event, payload, ref } = data;\n const callback = () => {\n this.encode(data, (result) => {\n var _a;\n (_a = this.conn) === null || _a === void 0 ? void 0 : _a.send(result);\n });\n };\n this.log('push', `${topic} ${event} (${ref})`, payload);\n if (this.isConnected()) {\n callback();\n }\n else {\n this.sendBuffer.push(callback);\n }\n }\n /**\n * Sets the JWT access token used for channel subscription authorization and Realtime RLS.\n *\n * If param is null it will use the `accessToken` callback function or the token set on the client.\n *\n * On callback used, it will set the value of the token internal to the client.\n *\n * @param token A JWT string to override the token set on the client.\n */\n async setAuth(token = null) {\n let tokenToSend = token ||\n (this.accessToken && (await this.accessToken())) ||\n this.accessTokenValue;\n if (tokenToSend) {\n let parsed = null;\n try {\n parsed = JSON.parse(atob(tokenToSend.split('.')[1]));\n }\n catch (_error) { }\n if (parsed && parsed.exp) {\n let now = Math.floor(Date.now() / 1000);\n let valid = now - parsed.exp < 0;\n if (!valid) {\n this.log('auth', `InvalidJWTToken: Invalid value for JWT claim \"exp\" with value ${parsed.exp}`);\n return Promise.reject(`InvalidJWTToken: Invalid value for JWT claim \"exp\" with value ${parsed.exp}`);\n }\n }\n this.accessTokenValue = tokenToSend;\n this.channels.forEach((channel) => {\n tokenToSend && channel.updateJoinPayload({ access_token: tokenToSend });\n if (channel.joinedOnce && channel._isJoined()) {\n channel._push(CHANNEL_EVENTS.access_token, {\n access_token: tokenToSend,\n });\n }\n });\n }\n }\n /**\n * Sends a heartbeat message if the socket is connected.\n */\n async sendHeartbeat() {\n var _a;\n if (!this.isConnected()) {\n return;\n }\n if (this.pendingHeartbeatRef) {\n this.pendingHeartbeatRef = null;\n this.log('transport', 'heartbeat timeout. Attempting to re-establish connection');\n (_a = this.conn) === null || _a === void 0 ? void 0 : _a.close(WS_CLOSE_NORMAL, 'hearbeat timeout');\n return;\n }\n this.pendingHeartbeatRef = this._makeRef();\n this.push({\n topic: 'phoenix',\n event: 'heartbeat',\n payload: {},\n ref: this.pendingHeartbeatRef,\n });\n this.setAuth();\n }\n /**\n * Flushes send buffer\n */\n flushSendBuffer() {\n if (this.isConnected() && this.sendBuffer.length > 0) {\n this.sendBuffer.forEach((callback) => callback());\n this.sendBuffer = [];\n }\n }\n /**\n * Return the next message ref, accounting for overflows\n *\n * @internal\n */\n _makeRef() {\n let newRef = this.ref + 1;\n if (newRef === this.ref) {\n this.ref = 0;\n }\n else {\n this.ref = newRef;\n }\n return this.ref.toString();\n }\n /**\n * Unsubscribe from channels with the specified topic.\n *\n * @internal\n */\n _leaveOpenTopic(topic) {\n let dupChannel = this.channels.find((c) => c.topic === topic && (c._isJoined() || c._isJoining()));\n if (dupChannel) {\n this.log('transport', `leaving duplicate topic \"${topic}\"`);\n dupChannel.unsubscribe();\n }\n }\n /**\n * Removes a subscription from the socket.\n *\n * @param channel An open subscription.\n *\n * @internal\n */\n _remove(channel) {\n this.channels = this.channels.filter((c) => c._joinRef() !== channel._joinRef());\n }\n /**\n * Sets up connection handlers.\n *\n * @internal\n */\n setupConnection() {\n if (this.conn) {\n this.conn.binaryType = 'arraybuffer';\n this.conn.onopen = () => this._onConnOpen();\n this.conn.onerror = (error) => this._onConnError(error);\n this.conn.onmessage = (event) => this._onConnMessage(event);\n this.conn.onclose = (event) => this._onConnClose(event);\n }\n }\n /** @internal */\n _onConnMessage(rawMessage) {\n this.decode(rawMessage.data, (msg) => {\n let { topic, event, payload, ref } = msg;\n if (ref && ref === this.pendingHeartbeatRef) {\n this.pendingHeartbeatRef = null;\n }\n this.log('receive', `${payload.status || ''} ${topic} ${event} ${(ref && '(' + ref + ')') || ''}`, payload);\n this.channels\n .filter((channel) => channel._isMember(topic))\n .forEach((channel) => channel._trigger(event, payload, ref));\n this.stateChangeCallbacks.message.forEach((callback) => callback(msg));\n });\n }\n /** @internal */\n async _onConnOpen() {\n this.log('transport', `connected to ${this.endpointURL()}`);\n this.flushSendBuffer();\n this.reconnectTimer.reset();\n if (!this.worker) {\n this.heartbeatTimer && clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = setInterval(() => this.sendHeartbeat(), this.heartbeatIntervalMs);\n }\n else {\n if (this.workerUrl) {\n this.log('worker', `starting worker for from ${this.workerUrl}`);\n }\n else {\n this.log('worker', `starting default worker`);\n }\n const objectUrl = this._workerObjectUrl(this.workerUrl);\n this.workerRef = new Worker(objectUrl);\n this.workerRef.onerror = (error) => {\n this.log('worker', 'worker error', error.message);\n this.workerRef.terminate();\n };\n this.workerRef.onmessage = (event) => {\n if (event.data.event === 'keepAlive') {\n this.sendHeartbeat();\n }\n };\n this.workerRef.postMessage({\n event: 'start',\n interval: this.heartbeatIntervalMs,\n });\n }\n this.stateChangeCallbacks.open.forEach((callback) => callback());\n }\n /** @internal */\n _onConnClose(event) {\n this.log('transport', 'close', event);\n this._triggerChanError();\n this.heartbeatTimer && clearInterval(this.heartbeatTimer);\n this.reconnectTimer.scheduleTimeout();\n this.stateChangeCallbacks.close.forEach((callback) => callback(event));\n }\n /** @internal */\n _onConnError(error) {\n this.log('transport', error.message);\n this._triggerChanError();\n this.stateChangeCallbacks.error.forEach((callback) => callback(error));\n }\n /** @internal */\n _triggerChanError() {\n this.channels.forEach((channel) => channel._trigger(CHANNEL_EVENTS.error));\n }\n /** @internal */\n _appendParams(url, params) {\n if (Object.keys(params).length === 0) {\n return url;\n }\n const prefix = url.match(/\\?/) ? '&' : '?';\n const query = new URLSearchParams(params);\n return `${url}${prefix}${query}`;\n }\n _workerObjectUrl(url) {\n let result_url;\n if (url) {\n result_url = url;\n }\n else {\n const blob = new Blob([WORKER_SCRIPT], { type: 'application/javascript' });\n result_url = URL.createObjectURL(blob);\n }\n return result_url;\n }\n}\nclass WSWebSocketDummy {\n constructor(address, _protocols, options) {\n this.binaryType = 'arraybuffer';\n this.onclose = () => { };\n this.onerror = () => { };\n this.onmessage = () => { };\n this.onopen = () => { };\n this.readyState = SOCKET_STATES.connecting;\n this.send = () => { };\n this.url = null;\n this.url = address;\n this.close = options.close;\n }\n}\n//# sourceMappingURL=RealtimeClient.js.map","export class StorageError extends Error {\n constructor(message) {\n super(message);\n this.__isStorageError = true;\n this.name = 'StorageError';\n }\n}\nexport function isStorageError(error) {\n return typeof error === 'object' && error !== null && '__isStorageError' in error;\n}\nexport class StorageApiError extends StorageError {\n constructor(message, status) {\n super(message);\n this.name = 'StorageApiError';\n this.status = status;\n }\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n status: this.status,\n };\n }\n}\nexport class StorageUnknownError extends StorageError {\n constructor(message, originalError) {\n super(message);\n this.name = 'StorageUnknownError';\n this.originalError = originalError;\n }\n}\n//# sourceMappingURL=errors.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nexport const resolveFetch = (customFetch) => {\n let _fetch;\n if (customFetch) {\n _fetch = customFetch;\n }\n else if (typeof fetch === 'undefined') {\n _fetch = (...args) => import('@supabase/node-fetch').then(({ default: fetch }) => fetch(...args));\n }\n else {\n _fetch = fetch;\n }\n return (...args) => _fetch(...args);\n};\nexport const resolveResponse = () => __awaiter(void 0, void 0, void 0, function* () {\n if (typeof Response === 'undefined') {\n // @ts-ignore\n return (yield import('@supabase/node-fetch')).Response;\n }\n return Response;\n});\nexport const recursiveToCamel = (item) => {\n if (Array.isArray(item)) {\n return item.map((el) => recursiveToCamel(el));\n }\n else if (typeof item === 'function' || item !== Object(item)) {\n return item;\n }\n const result = {};\n Object.entries(item).forEach(([key, value]) => {\n const newKey = key.replace(/([-_][a-z])/gi, (c) => c.toUpperCase().replace(/[-_]/g, ''));\n result[newKey] = recursiveToCamel(value);\n });\n return result;\n};\n//# sourceMappingURL=helpers.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { StorageApiError, StorageUnknownError } from './errors';\nimport { resolveResponse } from './helpers';\nconst _getErrorMessage = (err) => err.msg || err.message || err.error_description || err.error || JSON.stringify(err);\nconst handleError = (error, reject, options) => __awaiter(void 0, void 0, void 0, function* () {\n const Res = yield resolveResponse();\n if (error instanceof Res && !(options === null || options === void 0 ? void 0 : options.noResolveJson)) {\n error\n .json()\n .then((err) => {\n reject(new StorageApiError(_getErrorMessage(err), error.status || 500));\n })\n .catch((err) => {\n reject(new StorageUnknownError(_getErrorMessage(err), err));\n });\n }\n else {\n reject(new StorageUnknownError(_getErrorMessage(error), error));\n }\n});\nconst _getRequestParams = (method, options, parameters, body) => {\n const params = { method, headers: (options === null || options === void 0 ? void 0 : options.headers) || {} };\n if (method === 'GET') {\n return params;\n }\n params.headers = Object.assign({ 'Content-Type': 'application/json' }, options === null || options === void 0 ? void 0 : options.headers);\n if (body) {\n params.body = JSON.stringify(body);\n }\n return Object.assign(Object.assign({}, params), parameters);\n};\nfunction _handleRequest(fetcher, method, url, options, parameters, body) {\n return __awaiter(this, void 0, void 0, function* () {\n return new Promise((resolve, reject) => {\n fetcher(url, _getRequestParams(method, options, parameters, body))\n .then((result) => {\n if (!result.ok)\n throw result;\n if (options === null || options === void 0 ? void 0 : options.noResolveJson)\n return result;\n return result.json();\n })\n .then((data) => resolve(data))\n .catch((error) => handleError(error, reject, options));\n });\n });\n}\nexport function get(fetcher, url, options, parameters) {\n return __awaiter(this, void 0, void 0, function* () {\n return _handleRequest(fetcher, 'GET', url, options, parameters);\n });\n}\nexport function post(fetcher, url, body, options, parameters) {\n return __awaiter(this, void 0, void 0, function* () {\n return _handleRequest(fetcher, 'POST', url, options, parameters, body);\n });\n}\nexport function put(fetcher, url, body, options, parameters) {\n return __awaiter(this, void 0, void 0, function* () {\n return _handleRequest(fetcher, 'PUT', url, options, parameters, body);\n });\n}\nexport function head(fetcher, url, options, parameters) {\n return __awaiter(this, void 0, void 0, function* () {\n return _handleRequest(fetcher, 'HEAD', url, Object.assign(Object.assign({}, options), { noResolveJson: true }), parameters);\n });\n}\nexport function remove(fetcher, url, body, options, parameters) {\n return __awaiter(this, void 0, void 0, function* () {\n return _handleRequest(fetcher, 'DELETE', url, options, parameters, body);\n });\n}\n//# sourceMappingURL=fetch.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { isStorageError, StorageError, StorageUnknownError } from '../lib/errors';\nimport { get, head, post, remove } from '../lib/fetch';\nimport { recursiveToCamel, resolveFetch } from '../lib/helpers';\nconst DEFAULT_SEARCH_OPTIONS = {\n limit: 100,\n offset: 0,\n sortBy: {\n column: 'name',\n order: 'asc',\n },\n};\nconst DEFAULT_FILE_OPTIONS = {\n cacheControl: '3600',\n contentType: 'text/plain;charset=UTF-8',\n upsert: false,\n};\nexport default class StorageFileApi {\n constructor(url, headers = {}, bucketId, fetch) {\n this.url = url;\n this.headers = headers;\n this.bucketId = bucketId;\n this.fetch = resolveFetch(fetch);\n }\n /**\n * Uploads a file to an existing bucket or replaces an existing file at the specified path with a new one.\n *\n * @param method HTTP method.\n * @param path The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\n * @param fileBody The body of the file to be stored in the bucket.\n */\n uploadOrUpdate(method, path, fileBody, fileOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n let body;\n const options = Object.assign(Object.assign({}, DEFAULT_FILE_OPTIONS), fileOptions);\n let headers = Object.assign(Object.assign({}, this.headers), (method === 'POST' && { 'x-upsert': String(options.upsert) }));\n const metadata = options.metadata;\n if (typeof Blob !== 'undefined' && fileBody instanceof Blob) {\n body = new FormData();\n body.append('cacheControl', options.cacheControl);\n if (metadata) {\n body.append('metadata', this.encodeMetadata(metadata));\n }\n body.append('', fileBody);\n }\n else if (typeof FormData !== 'undefined' && fileBody instanceof FormData) {\n body = fileBody;\n body.append('cacheControl', options.cacheControl);\n if (metadata) {\n body.append('metadata', this.encodeMetadata(metadata));\n }\n }\n else {\n body = fileBody;\n headers['cache-control'] = `max-age=${options.cacheControl}`;\n headers['content-type'] = options.contentType;\n if (metadata) {\n headers['x-metadata'] = this.toBase64(this.encodeMetadata(metadata));\n }\n }\n if (fileOptions === null || fileOptions === void 0 ? void 0 : fileOptions.headers) {\n headers = Object.assign(Object.assign({}, headers), fileOptions.headers);\n }\n const cleanPath = this._removeEmptyFolders(path);\n const _path = this._getFinalPath(cleanPath);\n const res = yield this.fetch(`${this.url}/object/${_path}`, Object.assign({ method, body: body, headers }, ((options === null || options === void 0 ? void 0 : options.duplex) ? { duplex: options.duplex } : {})));\n const data = yield res.json();\n if (res.ok) {\n return {\n data: { path: cleanPath, id: data.Id, fullPath: data.Key },\n error: null,\n };\n }\n else {\n const error = data;\n return { data: null, error };\n }\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Uploads a file to an existing bucket.\n *\n * @param path The file path, including the file name. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\n * @param fileBody The body of the file to be stored in the bucket.\n */\n upload(path, fileBody, fileOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.uploadOrUpdate('POST', path, fileBody, fileOptions);\n });\n }\n /**\n * Upload a file with a token generated from `createSignedUploadUrl`.\n * @param path The file path, including the file name. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to upload.\n * @param token The token generated from `createSignedUploadUrl`\n * @param fileBody The body of the file to be stored in the bucket.\n */\n uploadToSignedUrl(path, token, fileBody, fileOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n const cleanPath = this._removeEmptyFolders(path);\n const _path = this._getFinalPath(cleanPath);\n const url = new URL(this.url + `/object/upload/sign/${_path}`);\n url.searchParams.set('token', token);\n try {\n let body;\n const options = Object.assign({ upsert: DEFAULT_FILE_OPTIONS.upsert }, fileOptions);\n const headers = Object.assign(Object.assign({}, this.headers), { 'x-upsert': String(options.upsert) });\n if (typeof Blob !== 'undefined' && fileBody instanceof Blob) {\n body = new FormData();\n body.append('cacheControl', options.cacheControl);\n body.append('', fileBody);\n }\n else if (typeof FormData !== 'undefined' && fileBody instanceof FormData) {\n body = fileBody;\n body.append('cacheControl', options.cacheControl);\n }\n else {\n body = fileBody;\n headers['cache-control'] = `max-age=${options.cacheControl}`;\n headers['content-type'] = options.contentType;\n }\n const res = yield this.fetch(url.toString(), {\n method: 'PUT',\n body: body,\n headers,\n });\n const data = yield res.json();\n if (res.ok) {\n return {\n data: { path: cleanPath, fullPath: data.Key },\n error: null,\n };\n }\n else {\n const error = data;\n return { data: null, error };\n }\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Creates a signed upload URL.\n * Signed upload URLs can be used to upload files to the bucket without further authentication.\n * They are valid for 2 hours.\n * @param path The file path, including the current file name. For example `folder/image.png`.\n * @param options.upsert If set to true, allows the file to be overwritten if it already exists.\n */\n createSignedUploadUrl(path, options) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n let _path = this._getFinalPath(path);\n const headers = Object.assign({}, this.headers);\n if (options === null || options === void 0 ? void 0 : options.upsert) {\n headers['x-upsert'] = 'true';\n }\n const data = yield post(this.fetch, `${this.url}/object/upload/sign/${_path}`, {}, { headers });\n const url = new URL(this.url + data.url);\n const token = url.searchParams.get('token');\n if (!token) {\n throw new StorageError('No token returned by API');\n }\n return { data: { signedUrl: url.toString(), path, token }, error: null };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Replaces an existing file at the specified path with a new one.\n *\n * @param path The relative file path. Should be of the format `folder/subfolder/filename.png`. The bucket must already exist before attempting to update.\n * @param fileBody The body of the file to be stored in the bucket.\n */\n update(path, fileBody, fileOptions) {\n return __awaiter(this, void 0, void 0, function* () {\n return this.uploadOrUpdate('PUT', path, fileBody, fileOptions);\n });\n }\n /**\n * Moves an existing file to a new path in the same bucket.\n *\n * @param fromPath The original file path, including the current file name. For example `folder/image.png`.\n * @param toPath The new file path, including the new file name. For example `folder/image-new.png`.\n * @param options The destination options.\n */\n move(fromPath, toPath, options) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const data = yield post(this.fetch, `${this.url}/object/move`, {\n bucketId: this.bucketId,\n sourceKey: fromPath,\n destinationKey: toPath,\n destinationBucket: options === null || options === void 0 ? void 0 : options.destinationBucket,\n }, { headers: this.headers });\n return { data, error: null };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Copies an existing file to a new path in the same bucket.\n *\n * @param fromPath The original file path, including the current file name. For example `folder/image.png`.\n * @param toPath The new file path, including the new file name. For example `folder/image-copy.png`.\n * @param options The destination options.\n */\n copy(fromPath, toPath, options) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const data = yield post(this.fetch, `${this.url}/object/copy`, {\n bucketId: this.bucketId,\n sourceKey: fromPath,\n destinationKey: toPath,\n destinationBucket: options === null || options === void 0 ? void 0 : options.destinationBucket,\n }, { headers: this.headers });\n return { data: { path: data.Key }, error: null };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Creates a signed URL. Use a signed URL to share a file for a fixed amount of time.\n *\n * @param path The file path, including the current file name. For example `folder/image.png`.\n * @param expiresIn The number of seconds until the signed URL expires. For example, `60` for a URL which is valid for one minute.\n * @param options.download triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\n * @param options.transform Transform the asset before serving it to the client.\n */\n createSignedUrl(path, expiresIn, options) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n let _path = this._getFinalPath(path);\n let data = yield post(this.fetch, `${this.url}/object/sign/${_path}`, Object.assign({ expiresIn }, ((options === null || options === void 0 ? void 0 : options.transform) ? { transform: options.transform } : {})), { headers: this.headers });\n const downloadQueryParam = (options === null || options === void 0 ? void 0 : options.download)\n ? `&download=${options.download === true ? '' : options.download}`\n : '';\n const signedUrl = encodeURI(`${this.url}${data.signedURL}${downloadQueryParam}`);\n data = { signedUrl };\n return { data, error: null };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Creates multiple signed URLs. Use a signed URL to share a file for a fixed amount of time.\n *\n * @param paths The file paths to be downloaded, including the current file names. For example `['folder/image.png', 'folder2/image2.png']`.\n * @param expiresIn The number of seconds until the signed URLs expire. For example, `60` for URLs which are valid for one minute.\n * @param options.download triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\n */\n createSignedUrls(paths, expiresIn, options) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const data = yield post(this.fetch, `${this.url}/object/sign/${this.bucketId}`, { expiresIn, paths }, { headers: this.headers });\n const downloadQueryParam = (options === null || options === void 0 ? void 0 : options.download)\n ? `&download=${options.download === true ? '' : options.download}`\n : '';\n return {\n data: data.map((datum) => (Object.assign(Object.assign({}, datum), { signedUrl: datum.signedURL\n ? encodeURI(`${this.url}${datum.signedURL}${downloadQueryParam}`)\n : null }))),\n error: null,\n };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Downloads a file from a private bucket. For public buckets, make a request to the URL returned from `getPublicUrl` instead.\n *\n * @param path The full path and file name of the file to be downloaded. For example `folder/image.png`.\n * @param options.transform Transform the asset before serving it to the client.\n */\n download(path, options) {\n return __awaiter(this, void 0, void 0, function* () {\n const wantsTransformation = typeof (options === null || options === void 0 ? void 0 : options.transform) !== 'undefined';\n const renderPath = wantsTransformation ? 'render/image/authenticated' : 'object';\n const transformationQuery = this.transformOptsToQueryString((options === null || options === void 0 ? void 0 : options.transform) || {});\n const queryString = transformationQuery ? `?${transformationQuery}` : '';\n try {\n const _path = this._getFinalPath(path);\n const res = yield get(this.fetch, `${this.url}/${renderPath}/${_path}${queryString}`, {\n headers: this.headers,\n noResolveJson: true,\n });\n const data = yield res.blob();\n return { data, error: null };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Retrieves the details of an existing file.\n * @param path\n */\n info(path) {\n return __awaiter(this, void 0, void 0, function* () {\n const _path = this._getFinalPath(path);\n try {\n const data = yield get(this.fetch, `${this.url}/object/info/${_path}`, {\n headers: this.headers,\n });\n return { data: recursiveToCamel(data), error: null };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Checks the existence of a file.\n * @param path\n */\n exists(path) {\n return __awaiter(this, void 0, void 0, function* () {\n const _path = this._getFinalPath(path);\n try {\n yield head(this.fetch, `${this.url}/object/${_path}`, {\n headers: this.headers,\n });\n return { data: true, error: null };\n }\n catch (error) {\n if (isStorageError(error) && error instanceof StorageUnknownError) {\n const originalError = error.originalError;\n if ([400, 404].includes(originalError === null || originalError === void 0 ? void 0 : originalError.status)) {\n return { data: false, error };\n }\n }\n throw error;\n }\n });\n }\n /**\n * A simple convenience function to get the URL for an asset in a public bucket. If you do not want to use this function, you can construct the public URL by concatenating the bucket URL with the path to the asset.\n * This function does not verify if the bucket is public. If a public URL is created for a bucket which is not public, you will not be able to download the asset.\n *\n * @param path The path and name of the file to generate the public URL for. For example `folder/image.png`.\n * @param options.download Triggers the file as a download if set to true. Set this parameter as the name of the file if you want to trigger the download with a different filename.\n * @param options.transform Transform the asset before serving it to the client.\n */\n getPublicUrl(path, options) {\n const _path = this._getFinalPath(path);\n const _queryString = [];\n const downloadQueryParam = (options === null || options === void 0 ? void 0 : options.download)\n ? `download=${options.download === true ? '' : options.download}`\n : '';\n if (downloadQueryParam !== '') {\n _queryString.push(downloadQueryParam);\n }\n const wantsTransformation = typeof (options === null || options === void 0 ? void 0 : options.transform) !== 'undefined';\n const renderPath = wantsTransformation ? 'render/image' : 'object';\n const transformationQuery = this.transformOptsToQueryString((options === null || options === void 0 ? void 0 : options.transform) || {});\n if (transformationQuery !== '') {\n _queryString.push(transformationQuery);\n }\n let queryString = _queryString.join('&');\n if (queryString !== '') {\n queryString = `?${queryString}`;\n }\n return {\n data: { publicUrl: encodeURI(`${this.url}/${renderPath}/public/${_path}${queryString}`) },\n };\n }\n /**\n * Deletes files within the same bucket\n *\n * @param paths An array of files to delete, including the path and file name. For example [`'folder/image.png'`].\n */\n remove(paths) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const data = yield remove(this.fetch, `${this.url}/object/${this.bucketId}`, { prefixes: paths }, { headers: this.headers });\n return { data, error: null };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Get file metadata\n * @param id the file id to retrieve metadata\n */\n // async getMetadata(\n // id: string\n // ): Promise<\n // | {\n // data: Metadata\n // error: null\n // }\n // | {\n // data: null\n // error: StorageError\n // }\n // > {\n // try {\n // const data = await get(this.fetch, `${this.url}/metadata/${id}`, { headers: this.headers })\n // return { data, error: null }\n // } catch (error) {\n // if (isStorageError(error)) {\n // return { data: null, error }\n // }\n // throw error\n // }\n // }\n /**\n * Update file metadata\n * @param id the file id to update metadata\n * @param meta the new file metadata\n */\n // async updateMetadata(\n // id: string,\n // meta: Metadata\n // ): Promise<\n // | {\n // data: Metadata\n // error: null\n // }\n // | {\n // data: null\n // error: StorageError\n // }\n // > {\n // try {\n // const data = await post(\n // this.fetch,\n // `${this.url}/metadata/${id}`,\n // { ...meta },\n // { headers: this.headers }\n // )\n // return { data, error: null }\n // } catch (error) {\n // if (isStorageError(error)) {\n // return { data: null, error }\n // }\n // throw error\n // }\n // }\n /**\n * Lists all the files within a bucket.\n * @param path The folder path.\n */\n list(path, options, parameters) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const body = Object.assign(Object.assign(Object.assign({}, DEFAULT_SEARCH_OPTIONS), options), { prefix: path || '' });\n const data = yield post(this.fetch, `${this.url}/object/list/${this.bucketId}`, body, { headers: this.headers }, parameters);\n return { data, error: null };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n encodeMetadata(metadata) {\n return JSON.stringify(metadata);\n }\n toBase64(data) {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(data).toString('base64');\n }\n return btoa(data);\n }\n _getFinalPath(path) {\n return `${this.bucketId}/${path}`;\n }\n _removeEmptyFolders(path) {\n return path.replace(/^\\/|\\/$/g, '').replace(/\\/+/g, '/');\n }\n transformOptsToQueryString(transform) {\n const params = [];\n if (transform.width) {\n params.push(`width=${transform.width}`);\n }\n if (transform.height) {\n params.push(`height=${transform.height}`);\n }\n if (transform.resize) {\n params.push(`resize=${transform.resize}`);\n }\n if (transform.format) {\n params.push(`format=${transform.format}`);\n }\n if (transform.quality) {\n params.push(`quality=${transform.quality}`);\n }\n return params.join('&');\n }\n}\n//# sourceMappingURL=StorageFileApi.js.map","// generated by genversion\nexport const version = '2.7.1';\n//# sourceMappingURL=version.js.map","import { version } from './version';\nexport const DEFAULT_HEADERS = { 'X-Client-Info': `storage-js/${version}` };\n//# sourceMappingURL=constants.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { DEFAULT_HEADERS } from '../lib/constants';\nimport { isStorageError } from '../lib/errors';\nimport { get, post, put, remove } from '../lib/fetch';\nimport { resolveFetch } from '../lib/helpers';\nexport default class StorageBucketApi {\n constructor(url, headers = {}, fetch) {\n this.url = url;\n this.headers = Object.assign(Object.assign({}, DEFAULT_HEADERS), headers);\n this.fetch = resolveFetch(fetch);\n }\n /**\n * Retrieves the details of all Storage buckets within an existing project.\n */\n listBuckets() {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const data = yield get(this.fetch, `${this.url}/bucket`, { headers: this.headers });\n return { data, error: null };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Retrieves the details of an existing Storage bucket.\n *\n * @param id The unique identifier of the bucket you would like to retrieve.\n */\n getBucket(id) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const data = yield get(this.fetch, `${this.url}/bucket/${id}`, { headers: this.headers });\n return { data, error: null };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Creates a new Storage bucket\n *\n * @param id A unique identifier for the bucket you are creating.\n * @param options.public The visibility of the bucket. Public buckets don't require an authorization token to download objects, but still require a valid token for all other operations. By default, buckets are private.\n * @param options.fileSizeLimit specifies the max file size in bytes that can be uploaded to this bucket.\n * The global file size limit takes precedence over this value.\n * The default value is null, which doesn't set a per bucket file size limit.\n * @param options.allowedMimeTypes specifies the allowed mime types that this bucket can accept during upload.\n * The default value is null, which allows files with all mime types to be uploaded.\n * Each mime type specified can be a wildcard, e.g. image/*, or a specific mime type, e.g. image/png.\n * @returns newly created bucket id\n */\n createBucket(id, options = {\n public: false,\n }) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const data = yield post(this.fetch, `${this.url}/bucket`, {\n id,\n name: id,\n public: options.public,\n file_size_limit: options.fileSizeLimit,\n allowed_mime_types: options.allowedMimeTypes,\n }, { headers: this.headers });\n return { data, error: null };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Updates a Storage bucket\n *\n * @param id A unique identifier for the bucket you are updating.\n * @param options.public The visibility of the bucket. Public buckets don't require an authorization token to download objects, but still require a valid token for all other operations.\n * @param options.fileSizeLimit specifies the max file size in bytes that can be uploaded to this bucket.\n * The global file size limit takes precedence over this value.\n * The default value is null, which doesn't set a per bucket file size limit.\n * @param options.allowedMimeTypes specifies the allowed mime types that this bucket can accept during upload.\n * The default value is null, which allows files with all mime types to be uploaded.\n * Each mime type specified can be a wildcard, e.g. image/*, or a specific mime type, e.g. image/png.\n */\n updateBucket(id, options) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const data = yield put(this.fetch, `${this.url}/bucket/${id}`, {\n id,\n name: id,\n public: options.public,\n file_size_limit: options.fileSizeLimit,\n allowed_mime_types: options.allowedMimeTypes,\n }, { headers: this.headers });\n return { data, error: null };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Removes all objects inside a single bucket.\n *\n * @param id The unique identifier of the bucket you would like to empty.\n */\n emptyBucket(id) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const data = yield post(this.fetch, `${this.url}/bucket/${id}/empty`, {}, { headers: this.headers });\n return { data, error: null };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * Deletes an existing bucket. A bucket can't be deleted with existing objects inside it.\n * You must first `empty()` the bucket.\n *\n * @param id The unique identifier of the bucket you would like to delete.\n */\n deleteBucket(id) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const data = yield remove(this.fetch, `${this.url}/bucket/${id}`, {}, { headers: this.headers });\n return { data, error: null };\n }\n catch (error) {\n if (isStorageError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n}\n//# sourceMappingURL=StorageBucketApi.js.map","import StorageFileApi from './packages/StorageFileApi';\nimport StorageBucketApi from './packages/StorageBucketApi';\nexport class StorageClient extends StorageBucketApi {\n constructor(url, headers = {}, fetch) {\n super(url, headers, fetch);\n }\n /**\n * Perform file operation in a bucket.\n *\n * @param id The bucket id to operate on.\n */\n from(id) {\n return new StorageFileApi(this.url, this.headers, id, this.fetch);\n }\n}\n//# sourceMappingURL=StorageClient.js.map","export const version = '2.49.1';\n//# sourceMappingURL=version.js.map","import { version } from './version';\nlet JS_ENV = '';\n// @ts-ignore\nif (typeof Deno !== 'undefined') {\n JS_ENV = 'deno';\n}\nelse if (typeof document !== 'undefined') {\n JS_ENV = 'web';\n}\nelse if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n JS_ENV = 'react-native';\n}\nelse {\n JS_ENV = 'node';\n}\nexport const DEFAULT_HEADERS = { 'X-Client-Info': `supabase-js-${JS_ENV}/${version}` };\nexport const DEFAULT_GLOBAL_OPTIONS = {\n headers: DEFAULT_HEADERS,\n};\nexport const DEFAULT_DB_OPTIONS = {\n schema: 'public',\n};\nexport const DEFAULT_AUTH_OPTIONS = {\n autoRefreshToken: true,\n persistSession: true,\n detectSessionInUrl: true,\n flowType: 'implicit',\n};\nexport const DEFAULT_REALTIME_OPTIONS = {};\n//# sourceMappingURL=constants.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n// @ts-ignore\nimport nodeFetch, { Headers as NodeFetchHeaders } from '@supabase/node-fetch';\nexport const resolveFetch = (customFetch) => {\n let _fetch;\n if (customFetch) {\n _fetch = customFetch;\n }\n else if (typeof fetch === 'undefined') {\n _fetch = nodeFetch;\n }\n else {\n _fetch = fetch;\n }\n return (...args) => _fetch(...args);\n};\nexport const resolveHeadersConstructor = () => {\n if (typeof Headers === 'undefined') {\n return NodeFetchHeaders;\n }\n return Headers;\n};\nexport const fetchWithAuth = (supabaseKey, getAccessToken, customFetch) => {\n const fetch = resolveFetch(customFetch);\n const HeadersConstructor = resolveHeadersConstructor();\n return (input, init) => __awaiter(void 0, void 0, void 0, function* () {\n var _a;\n const accessToken = (_a = (yield getAccessToken())) !== null && _a !== void 0 ? _a : supabaseKey;\n let headers = new HeadersConstructor(init === null || init === void 0 ? void 0 : init.headers);\n if (!headers.has('apikey')) {\n headers.set('apikey', supabaseKey);\n }\n if (!headers.has('Authorization')) {\n headers.set('Authorization', `Bearer ${accessToken}`);\n }\n return fetch(input, Object.assign(Object.assign({}, init), { headers }));\n });\n};\n//# sourceMappingURL=fetch.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nexport function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\nexport function stripTrailingSlash(url) {\n return url.replace(/\\/$/, '');\n}\nexport const isBrowser = () => typeof window !== 'undefined';\nexport function applySettingDefaults(options, defaults) {\n const { db: dbOptions, auth: authOptions, realtime: realtimeOptions, global: globalOptions, } = options;\n const { db: DEFAULT_DB_OPTIONS, auth: DEFAULT_AUTH_OPTIONS, realtime: DEFAULT_REALTIME_OPTIONS, global: DEFAULT_GLOBAL_OPTIONS, } = defaults;\n const result = {\n db: Object.assign(Object.assign({}, DEFAULT_DB_OPTIONS), dbOptions),\n auth: Object.assign(Object.assign({}, DEFAULT_AUTH_OPTIONS), authOptions),\n realtime: Object.assign(Object.assign({}, DEFAULT_REALTIME_OPTIONS), realtimeOptions),\n global: Object.assign(Object.assign({}, DEFAULT_GLOBAL_OPTIONS), globalOptions),\n accessToken: () => __awaiter(this, void 0, void 0, function* () { return ''; }),\n };\n if (options.accessToken) {\n result.accessToken = options.accessToken;\n }\n else {\n // hack around Required<>\n delete result.accessToken;\n }\n return result;\n}\n//# sourceMappingURL=helpers.js.map","export const version = '2.68.0';\n//# sourceMappingURL=version.js.map","import { version } from './version';\n/** Current session will be checked for refresh at this interval. */\nexport const AUTO_REFRESH_TICK_DURATION_MS = 30 * 1000;\n/**\n * A token refresh will be attempted this many ticks before the current session expires. */\nexport const AUTO_REFRESH_TICK_THRESHOLD = 3;\n/*\n * Earliest time before an access token expires that the session should be refreshed.\n */\nexport const EXPIRY_MARGIN_MS = AUTO_REFRESH_TICK_THRESHOLD * AUTO_REFRESH_TICK_DURATION_MS;\nexport const GOTRUE_URL = 'http://localhost:9999';\nexport const STORAGE_KEY = 'supabase.auth.token';\nexport const AUDIENCE = '';\nexport const DEFAULT_HEADERS = { 'X-Client-Info': `gotrue-js/${version}` };\nexport const NETWORK_FAILURE = {\n MAX_RETRIES: 10,\n RETRY_INTERVAL: 2, // in deciseconds\n};\nexport const API_VERSION_HEADER_NAME = 'X-Supabase-Api-Version';\nexport const API_VERSIONS = {\n '2024-01-01': {\n timestamp: Date.parse('2024-01-01T00:00:00.0Z'),\n name: '2024-01-01',\n },\n};\n//# sourceMappingURL=constants.js.map","import { API_VERSION_HEADER_NAME } from './constants';\nexport function expiresAt(expiresIn) {\n const timeNow = Math.round(Date.now() / 1000);\n return timeNow + expiresIn;\n}\nexport function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n const r = (Math.random() * 16) | 0, v = c == 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\nexport const isBrowser = () => typeof window !== 'undefined' && typeof document !== 'undefined';\nconst localStorageWriteTests = {\n tested: false,\n writable: false,\n};\n/**\n * Checks whether localStorage is supported on this browser.\n */\nexport const supportsLocalStorage = () => {\n if (!isBrowser()) {\n return false;\n }\n try {\n if (typeof globalThis.localStorage !== 'object') {\n return false;\n }\n }\n catch (e) {\n // DOM exception when accessing `localStorage`\n return false;\n }\n if (localStorageWriteTests.tested) {\n return localStorageWriteTests.writable;\n }\n const randomKey = `lswt-${Math.random()}${Math.random()}`;\n try {\n globalThis.localStorage.setItem(randomKey, randomKey);\n globalThis.localStorage.removeItem(randomKey);\n localStorageWriteTests.tested = true;\n localStorageWriteTests.writable = true;\n }\n catch (e) {\n // localStorage can't be written to\n // https://www.chromium.org/for-testers/bug-reporting-guidelines/uncaught-securityerror-failed-to-read-the-localstorage-property-from-window-access-is-denied-for-this-document\n localStorageWriteTests.tested = true;\n localStorageWriteTests.writable = false;\n }\n return localStorageWriteTests.writable;\n};\n/**\n * Extracts parameters encoded in the URL both in the query and fragment.\n */\nexport function parseParametersFromURL(href) {\n const result = {};\n const url = new URL(href);\n if (url.hash && url.hash[0] === '#') {\n try {\n const hashSearchParams = new URLSearchParams(url.hash.substring(1));\n hashSearchParams.forEach((value, key) => {\n result[key] = value;\n });\n }\n catch (e) {\n // hash is not a query string\n }\n }\n // search parameters take precedence over hash parameters\n url.searchParams.forEach((value, key) => {\n result[key] = value;\n });\n return result;\n}\nexport const resolveFetch = (customFetch) => {\n let _fetch;\n if (customFetch) {\n _fetch = customFetch;\n }\n else if (typeof fetch === 'undefined') {\n _fetch = (...args) => import('@supabase/node-fetch').then(({ default: fetch }) => fetch(...args));\n }\n else {\n _fetch = fetch;\n }\n return (...args) => _fetch(...args);\n};\nexport const looksLikeFetchResponse = (maybeResponse) => {\n return (typeof maybeResponse === 'object' &&\n maybeResponse !== null &&\n 'status' in maybeResponse &&\n 'ok' in maybeResponse &&\n 'json' in maybeResponse &&\n typeof maybeResponse.json === 'function');\n};\n// Storage helpers\nexport const setItemAsync = async (storage, key, data) => {\n await storage.setItem(key, JSON.stringify(data));\n};\nexport const getItemAsync = async (storage, key) => {\n const value = await storage.getItem(key);\n if (!value) {\n return null;\n }\n try {\n return JSON.parse(value);\n }\n catch (_a) {\n return value;\n }\n};\nexport const removeItemAsync = async (storage, key) => {\n await storage.removeItem(key);\n};\nexport function decodeBase64URL(value) {\n const key = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n let base64 = '';\n let chr1, chr2, chr3;\n let enc1, enc2, enc3, enc4;\n let i = 0;\n value = value.replace('-', '+').replace('_', '/');\n while (i < value.length) {\n enc1 = key.indexOf(value.charAt(i++));\n enc2 = key.indexOf(value.charAt(i++));\n enc3 = key.indexOf(value.charAt(i++));\n enc4 = key.indexOf(value.charAt(i++));\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n base64 = base64 + String.fromCharCode(chr1);\n if (enc3 != 64 && chr2 != 0) {\n base64 = base64 + String.fromCharCode(chr2);\n }\n if (enc4 != 64 && chr3 != 0) {\n base64 = base64 + String.fromCharCode(chr3);\n }\n }\n return base64;\n}\n/**\n * A deferred represents some asynchronous work that is not yet finished, which\n * may or may not culminate in a value.\n * Taken from: https://github.com/mike-north/types/blob/master/src/async.ts\n */\nexport class Deferred {\n constructor() {\n // eslint-disable-next-line @typescript-eslint/no-extra-semi\n ;\n this.promise = new Deferred.promiseConstructor((res, rej) => {\n // eslint-disable-next-line @typescript-eslint/no-extra-semi\n ;\n this.resolve = res;\n this.reject = rej;\n });\n }\n}\nDeferred.promiseConstructor = Promise;\n// Taken from: https://stackoverflow.com/questions/38552003/how-to-decode-jwt-token-in-javascript-without-using-a-library\nexport function decodeJWTPayload(token) {\n // Regex checks for base64url format\n const base64UrlRegex = /^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}=?$|[a-z0-9_-]{2}(==)?$)$/i;\n const parts = token.split('.');\n if (parts.length !== 3) {\n throw new Error('JWT is not valid: not a JWT structure');\n }\n if (!base64UrlRegex.test(parts[1])) {\n throw new Error('JWT is not valid: payload is not in base64url format');\n }\n const base64Url = parts[1];\n return JSON.parse(decodeBase64URL(base64Url));\n}\n/**\n * Creates a promise that resolves to null after some time.\n */\nexport async function sleep(time) {\n return await new Promise((accept) => {\n setTimeout(() => accept(null), time);\n });\n}\n/**\n * Converts the provided async function into a retryable function. Each result\n * or thrown error is sent to the isRetryable function which should return true\n * if the function should run again.\n */\nexport function retryable(fn, isRetryable) {\n const promise = new Promise((accept, reject) => {\n // eslint-disable-next-line @typescript-eslint/no-extra-semi\n ;\n (async () => {\n for (let attempt = 0; attempt < Infinity; attempt++) {\n try {\n const result = await fn(attempt);\n if (!isRetryable(attempt, null, result)) {\n accept(result);\n return;\n }\n }\n catch (e) {\n if (!isRetryable(attempt, e)) {\n reject(e);\n return;\n }\n }\n }\n })();\n });\n return promise;\n}\nfunction dec2hex(dec) {\n return ('0' + dec.toString(16)).substr(-2);\n}\n// Functions below taken from: https://stackoverflow.com/questions/63309409/creating-a-code-verifier-and-challenge-for-pkce-auth-on-spotify-api-in-reactjs\nexport function generatePKCEVerifier() {\n const verifierLength = 56;\n const array = new Uint32Array(verifierLength);\n if (typeof crypto === 'undefined') {\n const charSet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\n const charSetLen = charSet.length;\n let verifier = '';\n for (let i = 0; i < verifierLength; i++) {\n verifier += charSet.charAt(Math.floor(Math.random() * charSetLen));\n }\n return verifier;\n }\n crypto.getRandomValues(array);\n return Array.from(array, dec2hex).join('');\n}\nasync function sha256(randomString) {\n const encoder = new TextEncoder();\n const encodedData = encoder.encode(randomString);\n const hash = await crypto.subtle.digest('SHA-256', encodedData);\n const bytes = new Uint8Array(hash);\n return Array.from(bytes)\n .map((c) => String.fromCharCode(c))\n .join('');\n}\nfunction base64urlencode(str) {\n return btoa(str).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '');\n}\nexport async function generatePKCEChallenge(verifier) {\n const hasCryptoSupport = typeof crypto !== 'undefined' &&\n typeof crypto.subtle !== 'undefined' &&\n typeof TextEncoder !== 'undefined';\n if (!hasCryptoSupport) {\n console.warn('WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256.');\n return verifier;\n }\n const hashed = await sha256(verifier);\n return base64urlencode(hashed);\n}\nexport async function getCodeChallengeAndMethod(storage, storageKey, isPasswordRecovery = false) {\n const codeVerifier = generatePKCEVerifier();\n let storedCodeVerifier = codeVerifier;\n if (isPasswordRecovery) {\n storedCodeVerifier += '/PASSWORD_RECOVERY';\n }\n await setItemAsync(storage, `${storageKey}-code-verifier`, storedCodeVerifier);\n const codeChallenge = await generatePKCEChallenge(codeVerifier);\n const codeChallengeMethod = codeVerifier === codeChallenge ? 'plain' : 's256';\n return [codeChallenge, codeChallengeMethod];\n}\n/** Parses the API version which is 2YYY-MM-DD. */\nconst API_VERSION_REGEX = /^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i;\nexport function parseResponseAPIVersion(response) {\n const apiVersion = response.headers.get(API_VERSION_HEADER_NAME);\n if (!apiVersion) {\n return null;\n }\n if (!apiVersion.match(API_VERSION_REGEX)) {\n return null;\n }\n try {\n const date = new Date(`${apiVersion}T00:00:00.0Z`);\n return date;\n }\n catch (e) {\n return null;\n }\n}\n//# sourceMappingURL=helpers.js.map","export class AuthError extends Error {\n constructor(message, status, code) {\n super(message);\n this.__isAuthError = true;\n this.name = 'AuthError';\n this.status = status;\n this.code = code;\n }\n}\nexport function isAuthError(error) {\n return typeof error === 'object' && error !== null && '__isAuthError' in error;\n}\nexport class AuthApiError extends AuthError {\n constructor(message, status, code) {\n super(message, status, code);\n this.name = 'AuthApiError';\n this.status = status;\n this.code = code;\n }\n}\nexport function isAuthApiError(error) {\n return isAuthError(error) && error.name === 'AuthApiError';\n}\nexport class AuthUnknownError extends AuthError {\n constructor(message, originalError) {\n super(message);\n this.name = 'AuthUnknownError';\n this.originalError = originalError;\n }\n}\nexport class CustomAuthError extends AuthError {\n constructor(message, name, status, code) {\n super(message, status, code);\n this.name = name;\n this.status = status;\n }\n}\nexport class AuthSessionMissingError extends CustomAuthError {\n constructor() {\n super('Auth session missing!', 'AuthSessionMissingError', 400, undefined);\n }\n}\nexport function isAuthSessionMissingError(error) {\n return isAuthError(error) && error.name === 'AuthSessionMissingError';\n}\nexport class AuthInvalidTokenResponseError extends CustomAuthError {\n constructor() {\n super('Auth session or user missing', 'AuthInvalidTokenResponseError', 500, undefined);\n }\n}\nexport class AuthInvalidCredentialsError extends CustomAuthError {\n constructor(message) {\n super(message, 'AuthInvalidCredentialsError', 400, undefined);\n }\n}\nexport class AuthImplicitGrantRedirectError extends CustomAuthError {\n constructor(message, details = null) {\n super(message, 'AuthImplicitGrantRedirectError', 500, undefined);\n this.details = null;\n this.details = details;\n }\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n status: this.status,\n details: this.details,\n };\n }\n}\nexport function isAuthImplicitGrantRedirectError(error) {\n return isAuthError(error) && error.name === 'AuthImplicitGrantRedirectError';\n}\nexport class AuthPKCEGrantCodeExchangeError extends CustomAuthError {\n constructor(message, details = null) {\n super(message, 'AuthPKCEGrantCodeExchangeError', 500, undefined);\n this.details = null;\n this.details = details;\n }\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n status: this.status,\n details: this.details,\n };\n }\n}\nexport class AuthRetryableFetchError extends CustomAuthError {\n constructor(message, status) {\n super(message, 'AuthRetryableFetchError', status, undefined);\n }\n}\nexport function isAuthRetryableFetchError(error) {\n return isAuthError(error) && error.name === 'AuthRetryableFetchError';\n}\n/**\n * This error is thrown on certain methods when the password used is deemed\n * weak. Inspect the reasons to identify what password strength rules are\n * inadequate.\n */\nexport class AuthWeakPasswordError extends CustomAuthError {\n constructor(message, status, reasons) {\n super(message, 'AuthWeakPasswordError', status, 'weak_password');\n this.reasons = reasons;\n }\n}\nexport function isAuthWeakPasswordError(error) {\n return isAuthError(error) && error.name === 'AuthWeakPasswordError';\n}\n//# sourceMappingURL=errors.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { API_VERSIONS, API_VERSION_HEADER_NAME } from './constants';\nimport { expiresAt, looksLikeFetchResponse, parseResponseAPIVersion } from './helpers';\nimport { AuthApiError, AuthRetryableFetchError, AuthWeakPasswordError, AuthUnknownError, AuthSessionMissingError, } from './errors';\nconst _getErrorMessage = (err) => err.msg || err.message || err.error_description || err.error || JSON.stringify(err);\nconst NETWORK_ERROR_CODES = [502, 503, 504];\nexport async function handleError(error) {\n var _a;\n if (!looksLikeFetchResponse(error)) {\n throw new AuthRetryableFetchError(_getErrorMessage(error), 0);\n }\n if (NETWORK_ERROR_CODES.includes(error.status)) {\n // status in 500...599 range - server had an error, request might be retryed.\n throw new AuthRetryableFetchError(_getErrorMessage(error), error.status);\n }\n let data;\n try {\n data = await error.json();\n }\n catch (e) {\n throw new AuthUnknownError(_getErrorMessage(e), e);\n }\n let errorCode = undefined;\n const responseAPIVersion = parseResponseAPIVersion(error);\n if (responseAPIVersion &&\n responseAPIVersion.getTime() >= API_VERSIONS['2024-01-01'].timestamp &&\n typeof data === 'object' &&\n data &&\n typeof data.code === 'string') {\n errorCode = data.code;\n }\n else if (typeof data === 'object' && data && typeof data.error_code === 'string') {\n errorCode = data.error_code;\n }\n if (!errorCode) {\n // Legacy support for weak password errors, when there were no error codes\n if (typeof data === 'object' &&\n data &&\n typeof data.weak_password === 'object' &&\n data.weak_password &&\n Array.isArray(data.weak_password.reasons) &&\n data.weak_password.reasons.length &&\n data.weak_password.reasons.reduce((a, i) => a && typeof i === 'string', true)) {\n throw new AuthWeakPasswordError(_getErrorMessage(data), error.status, data.weak_password.reasons);\n }\n }\n else if (errorCode === 'weak_password') {\n throw new AuthWeakPasswordError(_getErrorMessage(data), error.status, ((_a = data.weak_password) === null || _a === void 0 ? void 0 : _a.reasons) || []);\n }\n else if (errorCode === 'session_not_found') {\n // The `session_id` inside the JWT does not correspond to a row in the\n // `sessions` table. This usually means the user has signed out, has been\n // deleted, or their session has somehow been terminated.\n throw new AuthSessionMissingError();\n }\n throw new AuthApiError(_getErrorMessage(data), error.status || 500, errorCode);\n}\nconst _getRequestParams = (method, options, parameters, body) => {\n const params = { method, headers: (options === null || options === void 0 ? void 0 : options.headers) || {} };\n if (method === 'GET') {\n return params;\n }\n params.headers = Object.assign({ 'Content-Type': 'application/json;charset=UTF-8' }, options === null || options === void 0 ? void 0 : options.headers);\n params.body = JSON.stringify(body);\n return Object.assign(Object.assign({}, params), parameters);\n};\nexport async function _request(fetcher, method, url, options) {\n var _a;\n const headers = Object.assign({}, options === null || options === void 0 ? void 0 : options.headers);\n if (!headers[API_VERSION_HEADER_NAME]) {\n headers[API_VERSION_HEADER_NAME] = API_VERSIONS['2024-01-01'].name;\n }\n if (options === null || options === void 0 ? void 0 : options.jwt) {\n headers['Authorization'] = `Bearer ${options.jwt}`;\n }\n const qs = (_a = options === null || options === void 0 ? void 0 : options.query) !== null && _a !== void 0 ? _a : {};\n if (options === null || options === void 0 ? void 0 : options.redirectTo) {\n qs['redirect_to'] = options.redirectTo;\n }\n const queryString = Object.keys(qs).length ? '?' + new URLSearchParams(qs).toString() : '';\n const data = await _handleRequest(fetcher, method, url + queryString, {\n headers,\n noResolveJson: options === null || options === void 0 ? void 0 : options.noResolveJson,\n }, {}, options === null || options === void 0 ? void 0 : options.body);\n return (options === null || options === void 0 ? void 0 : options.xform) ? options === null || options === void 0 ? void 0 : options.xform(data) : { data: Object.assign({}, data), error: null };\n}\nasync function _handleRequest(fetcher, method, url, options, parameters, body) {\n const requestParams = _getRequestParams(method, options, parameters, body);\n let result;\n try {\n result = await fetcher(url, Object.assign({}, requestParams));\n }\n catch (e) {\n console.error(e);\n // fetch failed, likely due to a network or CORS error\n throw new AuthRetryableFetchError(_getErrorMessage(e), 0);\n }\n if (!result.ok) {\n await handleError(result);\n }\n if (options === null || options === void 0 ? void 0 : options.noResolveJson) {\n return result;\n }\n try {\n return await result.json();\n }\n catch (e) {\n await handleError(e);\n }\n}\nexport function _sessionResponse(data) {\n var _a;\n let session = null;\n if (hasSession(data)) {\n session = Object.assign({}, data);\n if (!data.expires_at) {\n session.expires_at = expiresAt(data.expires_in);\n }\n }\n const user = (_a = data.user) !== null && _a !== void 0 ? _a : data;\n return { data: { session, user }, error: null };\n}\nexport function _sessionResponsePassword(data) {\n const response = _sessionResponse(data);\n if (!response.error &&\n data.weak_password &&\n typeof data.weak_password === 'object' &&\n Array.isArray(data.weak_password.reasons) &&\n data.weak_password.reasons.length &&\n data.weak_password.message &&\n typeof data.weak_password.message === 'string' &&\n data.weak_password.reasons.reduce((a, i) => a && typeof i === 'string', true)) {\n response.data.weak_password = data.weak_password;\n }\n return response;\n}\nexport function _userResponse(data) {\n var _a;\n const user = (_a = data.user) !== null && _a !== void 0 ? _a : data;\n return { data: { user }, error: null };\n}\nexport function _ssoResponse(data) {\n return { data, error: null };\n}\nexport function _generateLinkResponse(data) {\n const { action_link, email_otp, hashed_token, redirect_to, verification_type } = data, rest = __rest(data, [\"action_link\", \"email_otp\", \"hashed_token\", \"redirect_to\", \"verification_type\"]);\n const properties = {\n action_link,\n email_otp,\n hashed_token,\n redirect_to,\n verification_type,\n };\n const user = Object.assign({}, rest);\n return {\n data: {\n properties,\n user,\n },\n error: null,\n };\n}\nexport function _noResolveJsonResponse(data) {\n return data;\n}\n/**\n * hasSession checks if the response object contains a valid session\n * @param data A response object\n * @returns true if a session is in the response\n */\nfunction hasSession(data) {\n return data.access_token && data.refresh_token && data.expires_in;\n}\n//# sourceMappingURL=fetch.js.map","var __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nimport { _generateLinkResponse, _noResolveJsonResponse, _request, _userResponse, } from './lib/fetch';\nimport { resolveFetch } from './lib/helpers';\nimport { isAuthError } from './lib/errors';\nexport default class GoTrueAdminApi {\n constructor({ url = '', headers = {}, fetch, }) {\n this.url = url;\n this.headers = headers;\n this.fetch = resolveFetch(fetch);\n this.mfa = {\n listFactors: this._listFactors.bind(this),\n deleteFactor: this._deleteFactor.bind(this),\n };\n }\n /**\n * Removes a logged-in session.\n * @param jwt A valid, logged-in JWT.\n * @param scope The logout sope.\n */\n async signOut(jwt, scope = 'global') {\n try {\n await _request(this.fetch, 'POST', `${this.url}/logout?scope=${scope}`, {\n headers: this.headers,\n jwt,\n noResolveJson: true,\n });\n return { data: null, error: null };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Sends an invite link to an email address.\n * @param email The email address of the user.\n * @param options Additional options to be included when inviting.\n */\n async inviteUserByEmail(email, options = {}) {\n try {\n return await _request(this.fetch, 'POST', `${this.url}/invite`, {\n body: { email, data: options.data },\n headers: this.headers,\n redirectTo: options.redirectTo,\n xform: _userResponse,\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null }, error };\n }\n throw error;\n }\n }\n /**\n * Generates email links and OTPs to be sent via a custom email provider.\n * @param email The user's email.\n * @param options.password User password. For signup only.\n * @param options.data Optional user metadata. For signup only.\n * @param options.redirectTo The redirect url which should be appended to the generated link\n */\n async generateLink(params) {\n try {\n const { options } = params, rest = __rest(params, [\"options\"]);\n const body = Object.assign(Object.assign({}, rest), options);\n if ('newEmail' in rest) {\n // replace newEmail with new_email in request body\n body.new_email = rest === null || rest === void 0 ? void 0 : rest.newEmail;\n delete body['newEmail'];\n }\n return await _request(this.fetch, 'POST', `${this.url}/admin/generate_link`, {\n body: body,\n headers: this.headers,\n xform: _generateLinkResponse,\n redirectTo: options === null || options === void 0 ? void 0 : options.redirectTo,\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return {\n data: {\n properties: null,\n user: null,\n },\n error,\n };\n }\n throw error;\n }\n }\n // User Admin API\n /**\n * Creates a new user.\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async createUser(attributes) {\n try {\n return await _request(this.fetch, 'POST', `${this.url}/admin/users`, {\n body: attributes,\n headers: this.headers,\n xform: _userResponse,\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null }, error };\n }\n throw error;\n }\n }\n /**\n * Get a list of users.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n * @param params An object which supports `page` and `perPage` as numbers, to alter the paginated results.\n */\n async listUsers(params) {\n var _a, _b, _c, _d, _e, _f, _g;\n try {\n const pagination = { nextPage: null, lastPage: 0, total: 0 };\n const response = await _request(this.fetch, 'GET', `${this.url}/admin/users`, {\n headers: this.headers,\n noResolveJson: true,\n query: {\n page: (_b = (_a = params === null || params === void 0 ? void 0 : params.page) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : '',\n per_page: (_d = (_c = params === null || params === void 0 ? void 0 : params.perPage) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : '',\n },\n xform: _noResolveJsonResponse,\n });\n if (response.error)\n throw response.error;\n const users = await response.json();\n const total = (_e = response.headers.get('x-total-count')) !== null && _e !== void 0 ? _e : 0;\n const links = (_g = (_f = response.headers.get('link')) === null || _f === void 0 ? void 0 : _f.split(',')) !== null && _g !== void 0 ? _g : [];\n if (links.length > 0) {\n links.forEach((link) => {\n const page = parseInt(link.split(';')[0].split('=')[1].substring(0, 1));\n const rel = JSON.parse(link.split(';')[1].split('=')[1]);\n pagination[`${rel}Page`] = page;\n });\n pagination.total = parseInt(total);\n }\n return { data: Object.assign(Object.assign({}, users), pagination), error: null };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { users: [] }, error };\n }\n throw error;\n }\n }\n /**\n * Get user by id.\n *\n * @param uid The user's unique identifier\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async getUserById(uid) {\n try {\n return await _request(this.fetch, 'GET', `${this.url}/admin/users/${uid}`, {\n headers: this.headers,\n xform: _userResponse,\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null }, error };\n }\n throw error;\n }\n }\n /**\n * Updates the user data.\n *\n * @param attributes The data you want to update.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async updateUserById(uid, attributes) {\n try {\n return await _request(this.fetch, 'PUT', `${this.url}/admin/users/${uid}`, {\n body: attributes,\n headers: this.headers,\n xform: _userResponse,\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null }, error };\n }\n throw error;\n }\n }\n /**\n * Delete a user. Requires a `service_role` key.\n *\n * @param id The user id you want to remove.\n * @param shouldSoftDelete If true, then the user will be soft-deleted from the auth schema. Soft deletion allows user identification from the hashed user ID but is not reversible.\n * Defaults to false for backward compatibility.\n *\n * This function should only be called on a server. Never expose your `service_role` key in the browser.\n */\n async deleteUser(id, shouldSoftDelete = false) {\n try {\n return await _request(this.fetch, 'DELETE', `${this.url}/admin/users/${id}`, {\n headers: this.headers,\n body: {\n should_soft_delete: shouldSoftDelete,\n },\n xform: _userResponse,\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null }, error };\n }\n throw error;\n }\n }\n async _listFactors(params) {\n try {\n const { data, error } = await _request(this.fetch, 'GET', `${this.url}/admin/users/${params.userId}/factors`, {\n headers: this.headers,\n xform: (factors) => {\n return { data: { factors }, error: null };\n },\n });\n return { data, error };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n async _deleteFactor(params) {\n try {\n const data = await _request(this.fetch, 'DELETE', `${this.url}/admin/users/${params.userId}/factors/${params.id}`, {\n headers: this.headers,\n });\n return { data, error: null };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n}\n//# sourceMappingURL=GoTrueAdminApi.js.map","import { supportsLocalStorage } from './helpers';\n/**\n * Provides safe access to the globalThis.localStorage property.\n */\nexport const localStorageAdapter = {\n getItem: (key) => {\n if (!supportsLocalStorage()) {\n return null;\n }\n return globalThis.localStorage.getItem(key);\n },\n setItem: (key, value) => {\n if (!supportsLocalStorage()) {\n return;\n }\n globalThis.localStorage.setItem(key, value);\n },\n removeItem: (key) => {\n if (!supportsLocalStorage()) {\n return;\n }\n globalThis.localStorage.removeItem(key);\n },\n};\n/**\n * Returns a localStorage-like object that stores the key-value pairs in\n * memory.\n */\nexport function memoryLocalStorageAdapter(store = {}) {\n return {\n getItem: (key) => {\n return store[key] || null;\n },\n setItem: (key, value) => {\n store[key] = value;\n },\n removeItem: (key) => {\n delete store[key];\n },\n };\n}\n//# sourceMappingURL=local-storage.js.map","/**\n * https://mathiasbynens.be/notes/globalthis\n */\nexport function polyfillGlobalThis() {\n if (typeof globalThis === 'object')\n return;\n try {\n Object.defineProperty(Object.prototype, '__magic__', {\n get: function () {\n return this;\n },\n configurable: true,\n });\n // @ts-expect-error 'Allow access to magic'\n __magic__.globalThis = __magic__;\n // @ts-expect-error 'Allow access to magic'\n delete Object.prototype.__magic__;\n }\n catch (e) {\n if (typeof self !== 'undefined') {\n // @ts-expect-error 'Allow access to globals'\n self.globalThis = self;\n }\n }\n}\n//# sourceMappingURL=polyfills.js.map","import { supportsLocalStorage } from './helpers';\n/**\n * @experimental\n */\nexport const internals = {\n /**\n * @experimental\n */\n debug: !!(globalThis &&\n supportsLocalStorage() &&\n globalThis.localStorage &&\n globalThis.localStorage.getItem('supabase.gotrue-js.locks.debug') === 'true'),\n};\n/**\n * An error thrown when a lock cannot be acquired after some amount of time.\n *\n * Use the {@link #isAcquireTimeout} property instead of checking with `instanceof`.\n */\nexport class LockAcquireTimeoutError extends Error {\n constructor(message) {\n super(message);\n this.isAcquireTimeout = true;\n }\n}\nexport class NavigatorLockAcquireTimeoutError extends LockAcquireTimeoutError {\n}\nexport class ProcessLockAcquireTimeoutError extends LockAcquireTimeoutError {\n}\n/**\n * Implements a global exclusive lock using the Navigator LockManager API. It\n * is available on all browsers released after 2022-03-15 with Safari being the\n * last one to release support. If the API is not available, this function will\n * throw. Make sure you check availablility before configuring {@link\n * GoTrueClient}.\n *\n * You can turn on debugging by setting the `supabase.gotrue-js.locks.debug`\n * local storage item to `true`.\n *\n * Internals:\n *\n * Since the LockManager API does not preserve stack traces for the async\n * function passed in the `request` method, a trick is used where acquiring the\n * lock releases a previously started promise to run the operation in the `fn`\n * function. The lock waits for that promise to finish (with or without error),\n * while the function will finally wait for the result anyway.\n *\n * @param name Name of the lock to be acquired.\n * @param acquireTimeout If negative, no timeout. If 0 an error is thrown if\n * the lock can't be acquired without waiting. If positive, the lock acquire\n * will time out after so many milliseconds. An error is\n * a timeout if it has `isAcquireTimeout` set to true.\n * @param fn The operation to run once the lock is acquired.\n */\nexport async function navigatorLock(name, acquireTimeout, fn) {\n if (internals.debug) {\n console.log('@supabase/gotrue-js: navigatorLock: acquire lock', name, acquireTimeout);\n }\n const abortController = new globalThis.AbortController();\n if (acquireTimeout > 0) {\n setTimeout(() => {\n abortController.abort();\n if (internals.debug) {\n console.log('@supabase/gotrue-js: navigatorLock acquire timed out', name);\n }\n }, acquireTimeout);\n }\n // MDN article: https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request\n // Wrapping navigator.locks.request() with a plain Promise is done as some\n // libraries like zone.js patch the Promise object to track the execution\n // context. However, it appears that most browsers use an internal promise\n // implementation when using the navigator.locks.request() API causing them\n // to lose context and emit confusing log messages or break certain features.\n // This wrapping is believed to help zone.js track the execution context\n // better.\n return await Promise.resolve().then(() => globalThis.navigator.locks.request(name, acquireTimeout === 0\n ? {\n mode: 'exclusive',\n ifAvailable: true,\n }\n : {\n mode: 'exclusive',\n signal: abortController.signal,\n }, async (lock) => {\n if (lock) {\n if (internals.debug) {\n console.log('@supabase/gotrue-js: navigatorLock: acquired', name, lock.name);\n }\n try {\n return await fn();\n }\n finally {\n if (internals.debug) {\n console.log('@supabase/gotrue-js: navigatorLock: released', name, lock.name);\n }\n }\n }\n else {\n if (acquireTimeout === 0) {\n if (internals.debug) {\n console.log('@supabase/gotrue-js: navigatorLock: not immediately available', name);\n }\n throw new NavigatorLockAcquireTimeoutError(`Acquiring an exclusive Navigator LockManager lock \"${name}\" immediately failed`);\n }\n else {\n if (internals.debug) {\n try {\n const result = await globalThis.navigator.locks.query();\n console.log('@supabase/gotrue-js: Navigator LockManager state', JSON.stringify(result, null, ' '));\n }\n catch (e) {\n console.warn('@supabase/gotrue-js: Error when querying Navigator LockManager state', e);\n }\n }\n // Browser is not following the Navigator LockManager spec, it\n // returned a null lock when we didn't use ifAvailable. So we can\n // pretend the lock is acquired in the name of backward compatibility\n // and user experience and just run the function.\n console.warn('@supabase/gotrue-js: Navigator LockManager returned a null lock when using #request without ifAvailable set to true, it appears this browser is not following the LockManager spec https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request');\n return await fn();\n }\n }\n }));\n}\nconst PROCESS_LOCKS = {};\n/**\n * Implements a global exclusive lock that works only in the current process.\n * Useful for environments like React Native or other non-browser\n * single-process (i.e. no concept of \"tabs\") environments.\n *\n * Use {@link #navigatorLock} in browser environments.\n *\n * @param name Name of the lock to be acquired.\n * @param acquireTimeout If negative, no timeout. If 0 an error is thrown if\n * the lock can't be acquired without waiting. If positive, the lock acquire\n * will time out after so many milliseconds. An error is\n * a timeout if it has `isAcquireTimeout` set to true.\n * @param fn The operation to run once the lock is acquired.\n */\nexport async function processLock(name, acquireTimeout, fn) {\n var _a;\n const previousOperation = (_a = PROCESS_LOCKS[name]) !== null && _a !== void 0 ? _a : Promise.resolve();\n const currentOperation = Promise.race([\n previousOperation.catch(() => {\n // ignore error of previous operation that we're waiting to finish\n return null;\n }),\n acquireTimeout >= 0\n ? new Promise((_, reject) => {\n setTimeout(() => {\n reject(new ProcessLockAcquireTimeoutError(`Acquring process lock with name \"${name}\" timed out`));\n }, acquireTimeout);\n })\n : null,\n ].filter((x) => x))\n .catch((e) => {\n if (e && e.isAcquireTimeout) {\n throw e;\n }\n return null;\n })\n .then(async () => {\n // previous operations finished and we didn't get a race on the acquire\n // timeout, so the current operation can finally start\n return await fn();\n });\n PROCESS_LOCKS[name] = currentOperation.catch(async (e) => {\n if (e && e.isAcquireTimeout) {\n // if the current operation timed out, it doesn't mean that the previous\n // operation finished, so we need contnue waiting for it to finish\n await previousOperation;\n return null;\n }\n throw e;\n });\n // finally wait for the current operation to finish successfully, with an\n // error or with an acquire timeout error\n return await currentOperation;\n}\n//# sourceMappingURL=locks.js.map","import GoTrueAdminApi from './GoTrueAdminApi';\nimport { DEFAULT_HEADERS, EXPIRY_MARGIN_MS, AUTO_REFRESH_TICK_DURATION_MS, AUTO_REFRESH_TICK_THRESHOLD, GOTRUE_URL, STORAGE_KEY, } from './lib/constants';\nimport { AuthImplicitGrantRedirectError, AuthPKCEGrantCodeExchangeError, AuthInvalidCredentialsError, AuthSessionMissingError, AuthInvalidTokenResponseError, AuthUnknownError, isAuthApiError, isAuthError, isAuthRetryableFetchError, isAuthSessionMissingError, isAuthImplicitGrantRedirectError, } from './lib/errors';\nimport { _request, _sessionResponse, _sessionResponsePassword, _userResponse, _ssoResponse, } from './lib/fetch';\nimport { decodeJWTPayload, Deferred, getItemAsync, isBrowser, removeItemAsync, resolveFetch, setItemAsync, uuid, retryable, sleep, supportsLocalStorage, parseParametersFromURL, getCodeChallengeAndMethod, } from './lib/helpers';\nimport { localStorageAdapter, memoryLocalStorageAdapter } from './lib/local-storage';\nimport { polyfillGlobalThis } from './lib/polyfills';\nimport { version } from './lib/version';\nimport { LockAcquireTimeoutError, navigatorLock } from './lib/locks';\npolyfillGlobalThis(); // Make \"globalThis\" available\nconst DEFAULT_OPTIONS = {\n url: GOTRUE_URL,\n storageKey: STORAGE_KEY,\n autoRefreshToken: true,\n persistSession: true,\n detectSessionInUrl: true,\n headers: DEFAULT_HEADERS,\n flowType: 'implicit',\n debug: false,\n hasCustomAuthorizationHeader: false,\n};\nasync function lockNoOp(name, acquireTimeout, fn) {\n return await fn();\n}\nexport default class GoTrueClient {\n /**\n * Create a new client for use in the browser.\n */\n constructor(options) {\n var _a, _b;\n this.memoryStorage = null;\n this.stateChangeEmitters = new Map();\n this.autoRefreshTicker = null;\n this.visibilityChangedCallback = null;\n this.refreshingDeferred = null;\n /**\n * Keeps track of the async client initialization.\n * When null or not yet resolved the auth state is `unknown`\n * Once resolved the the auth state is known and it's save to call any further client methods.\n * Keep extra care to never reject or throw uncaught errors\n */\n this.initializePromise = null;\n this.detectSessionInUrl = true;\n this.hasCustomAuthorizationHeader = false;\n this.suppressGetSessionWarning = false;\n this.lockAcquired = false;\n this.pendingInLock = [];\n /**\n * Used to broadcast state change events to other tabs listening.\n */\n this.broadcastChannel = null;\n this.logger = console.log;\n this.instanceID = GoTrueClient.nextInstanceID;\n GoTrueClient.nextInstanceID += 1;\n if (this.instanceID > 0 && isBrowser()) {\n console.warn('Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.');\n }\n const settings = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options);\n this.logDebugMessages = !!settings.debug;\n if (typeof settings.debug === 'function') {\n this.logger = settings.debug;\n }\n this.persistSession = settings.persistSession;\n this.storageKey = settings.storageKey;\n this.autoRefreshToken = settings.autoRefreshToken;\n this.admin = new GoTrueAdminApi({\n url: settings.url,\n headers: settings.headers,\n fetch: settings.fetch,\n });\n this.url = settings.url;\n this.headers = settings.headers;\n this.fetch = resolveFetch(settings.fetch);\n this.lock = settings.lock || lockNoOp;\n this.detectSessionInUrl = settings.detectSessionInUrl;\n this.flowType = settings.flowType;\n this.hasCustomAuthorizationHeader = settings.hasCustomAuthorizationHeader;\n if (settings.lock) {\n this.lock = settings.lock;\n }\n else if (isBrowser() && ((_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.navigator) === null || _a === void 0 ? void 0 : _a.locks)) {\n this.lock = navigatorLock;\n }\n else {\n this.lock = lockNoOp;\n }\n this.mfa = {\n verify: this._verify.bind(this),\n enroll: this._enroll.bind(this),\n unenroll: this._unenroll.bind(this),\n challenge: this._challenge.bind(this),\n listFactors: this._listFactors.bind(this),\n challengeAndVerify: this._challengeAndVerify.bind(this),\n getAuthenticatorAssuranceLevel: this._getAuthenticatorAssuranceLevel.bind(this),\n };\n if (this.persistSession) {\n if (settings.storage) {\n this.storage = settings.storage;\n }\n else {\n if (supportsLocalStorage()) {\n this.storage = localStorageAdapter;\n }\n else {\n this.memoryStorage = {};\n this.storage = memoryLocalStorageAdapter(this.memoryStorage);\n }\n }\n }\n else {\n this.memoryStorage = {};\n this.storage = memoryLocalStorageAdapter(this.memoryStorage);\n }\n if (isBrowser() && globalThis.BroadcastChannel && this.persistSession && this.storageKey) {\n try {\n this.broadcastChannel = new globalThis.BroadcastChannel(this.storageKey);\n }\n catch (e) {\n console.error('Failed to create a new BroadcastChannel, multi-tab state changes will not be available', e);\n }\n (_b = this.broadcastChannel) === null || _b === void 0 ? void 0 : _b.addEventListener('message', async (event) => {\n this._debug('received broadcast notification from other tab or client', event);\n await this._notifyAllSubscribers(event.data.event, event.data.session, false); // broadcast = false so we don't get an endless loop of messages\n });\n }\n this.initialize();\n }\n _debug(...args) {\n if (this.logDebugMessages) {\n this.logger(`GoTrueClient@${this.instanceID} (${version}) ${new Date().toISOString()}`, ...args);\n }\n return this;\n }\n /**\n * Initializes the client session either from the url or from storage.\n * This method is automatically called when instantiating the client, but should also be called\n * manually when checking for an error from an auth redirect (oauth, magiclink, password recovery, etc).\n */\n async initialize() {\n if (this.initializePromise) {\n return await this.initializePromise;\n }\n this.initializePromise = (async () => {\n return await this._acquireLock(-1, async () => {\n return await this._initialize();\n });\n })();\n return await this.initializePromise;\n }\n /**\n * IMPORTANT:\n * 1. Never throw in this method, as it is called from the constructor\n * 2. Never return a session from this method as it would be cached over\n * the whole lifetime of the client\n */\n async _initialize() {\n var _a;\n try {\n const params = parseParametersFromURL(window.location.href);\n let callbackUrlType = 'none';\n if (this._isImplicitGrantCallback(params)) {\n callbackUrlType = 'implicit';\n }\n else if (await this._isPKCECallback(params)) {\n callbackUrlType = 'pkce';\n }\n /**\n * Attempt to get the session from the URL only if these conditions are fulfilled\n *\n * Note: If the URL isn't one of the callback url types (implicit or pkce),\n * then there could be an existing session so we don't want to prematurely remove it\n */\n if (isBrowser() && this.detectSessionInUrl && callbackUrlType !== 'none') {\n const { data, error } = await this._getSessionFromURL(params, callbackUrlType);\n if (error) {\n this._debug('#_initialize()', 'error detecting session from URL', error);\n if (isAuthImplicitGrantRedirectError(error)) {\n const errorCode = (_a = error.details) === null || _a === void 0 ? void 0 : _a.code;\n if (errorCode === 'identity_already_exists' ||\n errorCode === 'identity_not_found' ||\n errorCode === 'single_identity_not_deletable') {\n return { error };\n }\n }\n // failed login attempt via url,\n // remove old session as in verifyOtp, signUp and signInWith*\n await this._removeSession();\n return { error };\n }\n const { session, redirectType } = data;\n this._debug('#_initialize()', 'detected session in URL', session, 'redirect type', redirectType);\n await this._saveSession(session);\n setTimeout(async () => {\n if (redirectType === 'recovery') {\n await this._notifyAllSubscribers('PASSWORD_RECOVERY', session);\n }\n else {\n await this._notifyAllSubscribers('SIGNED_IN', session);\n }\n }, 0);\n return { error: null };\n }\n // no login attempt via callback url try to recover session from storage\n await this._recoverAndRefresh();\n return { error: null };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { error };\n }\n return {\n error: new AuthUnknownError('Unexpected error during initialization', error),\n };\n }\n finally {\n await this._handleVisibilityChange();\n this._debug('#_initialize()', 'end');\n }\n }\n /**\n * Creates a new anonymous user.\n *\n * @returns A session where the is_anonymous claim in the access token JWT set to true\n */\n async signInAnonymously(credentials) {\n var _a, _b, _c;\n try {\n const res = await _request(this.fetch, 'POST', `${this.url}/signup`, {\n headers: this.headers,\n body: {\n data: (_b = (_a = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _a === void 0 ? void 0 : _a.data) !== null && _b !== void 0 ? _b : {},\n gotrue_meta_security: { captcha_token: (_c = credentials === null || credentials === void 0 ? void 0 : credentials.options) === null || _c === void 0 ? void 0 : _c.captchaToken },\n },\n xform: _sessionResponse,\n });\n const { data, error } = res;\n if (error || !data) {\n return { data: { user: null, session: null }, error: error };\n }\n const session = data.session;\n const user = data.user;\n if (data.session) {\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('SIGNED_IN', session);\n }\n return { data: { user, session }, error: null };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null, session: null }, error };\n }\n throw error;\n }\n }\n /**\n * Creates a new user.\n *\n * Be aware that if a user account exists in the system you may get back an\n * error message that attempts to hide this information from the user.\n * This method has support for PKCE via email signups. The PKCE flow cannot be used when autoconfirm is enabled.\n *\n * @returns A logged-in session if the server has \"autoconfirm\" ON\n * @returns A user if the server has \"autoconfirm\" OFF\n */\n async signUp(credentials) {\n var _a, _b, _c;\n try {\n let res;\n if ('email' in credentials) {\n const { email, password, options } = credentials;\n let codeChallenge = null;\n let codeChallengeMethod = null;\n if (this.flowType === 'pkce') {\n ;\n [codeChallenge, codeChallengeMethod] = await getCodeChallengeAndMethod(this.storage, this.storageKey);\n }\n res = await _request(this.fetch, 'POST', `${this.url}/signup`, {\n headers: this.headers,\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\n body: {\n email,\n password,\n data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : {},\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n code_challenge: codeChallenge,\n code_challenge_method: codeChallengeMethod,\n },\n xform: _sessionResponse,\n });\n }\n else if ('phone' in credentials) {\n const { phone, password, options } = credentials;\n res = await _request(this.fetch, 'POST', `${this.url}/signup`, {\n headers: this.headers,\n body: {\n phone,\n password,\n data: (_b = options === null || options === void 0 ? void 0 : options.data) !== null && _b !== void 0 ? _b : {},\n channel: (_c = options === null || options === void 0 ? void 0 : options.channel) !== null && _c !== void 0 ? _c : 'sms',\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n },\n xform: _sessionResponse,\n });\n }\n else {\n throw new AuthInvalidCredentialsError('You must provide either an email or phone number and a password');\n }\n const { data, error } = res;\n if (error || !data) {\n return { data: { user: null, session: null }, error: error };\n }\n const session = data.session;\n const user = data.user;\n if (data.session) {\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('SIGNED_IN', session);\n }\n return { data: { user, session }, error: null };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null, session: null }, error };\n }\n throw error;\n }\n }\n /**\n * Log in an existing user with an email and password or phone and password.\n *\n * Be aware that you may get back an error message that will not distinguish\n * between the cases where the account does not exist or that the\n * email/phone and password combination is wrong or that the account can only\n * be accessed via social login.\n */\n async signInWithPassword(credentials) {\n try {\n let res;\n if ('email' in credentials) {\n const { email, password, options } = credentials;\n res = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=password`, {\n headers: this.headers,\n body: {\n email,\n password,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n },\n xform: _sessionResponsePassword,\n });\n }\n else if ('phone' in credentials) {\n const { phone, password, options } = credentials;\n res = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=password`, {\n headers: this.headers,\n body: {\n phone,\n password,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n },\n xform: _sessionResponsePassword,\n });\n }\n else {\n throw new AuthInvalidCredentialsError('You must provide either an email or phone number and a password');\n }\n const { data, error } = res;\n if (error) {\n return { data: { user: null, session: null }, error };\n }\n else if (!data || !data.session || !data.user) {\n return { data: { user: null, session: null }, error: new AuthInvalidTokenResponseError() };\n }\n if (data.session) {\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\n }\n return {\n data: Object.assign({ user: data.user, session: data.session }, (data.weak_password ? { weakPassword: data.weak_password } : null)),\n error,\n };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null, session: null }, error };\n }\n throw error;\n }\n }\n /**\n * Log in an existing user via a third-party provider.\n * This method supports the PKCE flow.\n */\n async signInWithOAuth(credentials) {\n var _a, _b, _c, _d;\n return await this._handleProviderSignIn(credentials.provider, {\n redirectTo: (_a = credentials.options) === null || _a === void 0 ? void 0 : _a.redirectTo,\n scopes: (_b = credentials.options) === null || _b === void 0 ? void 0 : _b.scopes,\n queryParams: (_c = credentials.options) === null || _c === void 0 ? void 0 : _c.queryParams,\n skipBrowserRedirect: (_d = credentials.options) === null || _d === void 0 ? void 0 : _d.skipBrowserRedirect,\n });\n }\n /**\n * Log in an existing user by exchanging an Auth Code issued during the PKCE flow.\n */\n async exchangeCodeForSession(authCode) {\n await this.initializePromise;\n return this._acquireLock(-1, async () => {\n return this._exchangeCodeForSession(authCode);\n });\n }\n async _exchangeCodeForSession(authCode) {\n const storageItem = await getItemAsync(this.storage, `${this.storageKey}-code-verifier`);\n const [codeVerifier, redirectType] = (storageItem !== null && storageItem !== void 0 ? storageItem : '').split('/');\n try {\n const { data, error } = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=pkce`, {\n headers: this.headers,\n body: {\n auth_code: authCode,\n code_verifier: codeVerifier,\n },\n xform: _sessionResponse,\n });\n await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`);\n if (error) {\n throw error;\n }\n if (!data || !data.session || !data.user) {\n return {\n data: { user: null, session: null, redirectType: null },\n error: new AuthInvalidTokenResponseError(),\n };\n }\n if (data.session) {\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\n }\n return { data: Object.assign(Object.assign({}, data), { redirectType: redirectType !== null && redirectType !== void 0 ? redirectType : null }), error };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null, session: null, redirectType: null }, error };\n }\n throw error;\n }\n }\n /**\n * Allows signing in with an OIDC ID token. The authentication provider used\n * should be enabled and configured.\n */\n async signInWithIdToken(credentials) {\n try {\n const { options, provider, token, access_token, nonce } = credentials;\n const res = await _request(this.fetch, 'POST', `${this.url}/token?grant_type=id_token`, {\n headers: this.headers,\n body: {\n provider,\n id_token: token,\n access_token,\n nonce,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n },\n xform: _sessionResponse,\n });\n const { data, error } = res;\n if (error) {\n return { data: { user: null, session: null }, error };\n }\n else if (!data || !data.session || !data.user) {\n return {\n data: { user: null, session: null },\n error: new AuthInvalidTokenResponseError(),\n };\n }\n if (data.session) {\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('SIGNED_IN', data.session);\n }\n return { data, error };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null, session: null }, error };\n }\n throw error;\n }\n }\n /**\n * Log in a user using magiclink or a one-time password (OTP).\n *\n * If the `{{ .ConfirmationURL }}` variable is specified in the email template, a magiclink will be sent.\n * If the `{{ .Token }}` variable is specified in the email template, an OTP will be sent.\n * If you're using phone sign-ins, only an OTP will be sent. You won't be able to send a magiclink for phone sign-ins.\n *\n * Be aware that you may get back an error message that will not distinguish\n * between the cases where the account does not exist or, that the account\n * can only be accessed via social login.\n *\n * Do note that you will need to configure a Whatsapp sender on Twilio\n * if you are using phone sign in with the 'whatsapp' channel. The whatsapp\n * channel is not supported on other providers\n * at this time.\n * This method supports PKCE when an email is passed.\n */\n async signInWithOtp(credentials) {\n var _a, _b, _c, _d, _e;\n try {\n if ('email' in credentials) {\n const { email, options } = credentials;\n let codeChallenge = null;\n let codeChallengeMethod = null;\n if (this.flowType === 'pkce') {\n ;\n [codeChallenge, codeChallengeMethod] = await getCodeChallengeAndMethod(this.storage, this.storageKey);\n }\n const { error } = await _request(this.fetch, 'POST', `${this.url}/otp`, {\n headers: this.headers,\n body: {\n email,\n data: (_a = options === null || options === void 0 ? void 0 : options.data) !== null && _a !== void 0 ? _a : {},\n create_user: (_b = options === null || options === void 0 ? void 0 : options.shouldCreateUser) !== null && _b !== void 0 ? _b : true,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n code_challenge: codeChallenge,\n code_challenge_method: codeChallengeMethod,\n },\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\n });\n return { data: { user: null, session: null }, error };\n }\n if ('phone' in credentials) {\n const { phone, options } = credentials;\n const { data, error } = await _request(this.fetch, 'POST', `${this.url}/otp`, {\n headers: this.headers,\n body: {\n phone,\n data: (_c = options === null || options === void 0 ? void 0 : options.data) !== null && _c !== void 0 ? _c : {},\n create_user: (_d = options === null || options === void 0 ? void 0 : options.shouldCreateUser) !== null && _d !== void 0 ? _d : true,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n channel: (_e = options === null || options === void 0 ? void 0 : options.channel) !== null && _e !== void 0 ? _e : 'sms',\n },\n });\n return { data: { user: null, session: null, messageId: data === null || data === void 0 ? void 0 : data.message_id }, error };\n }\n throw new AuthInvalidCredentialsError('You must provide either an email or phone number.');\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null, session: null }, error };\n }\n throw error;\n }\n }\n /**\n * Log in a user given a User supplied OTP or TokenHash received through mobile or email.\n */\n async verifyOtp(params) {\n var _a, _b;\n try {\n let redirectTo = undefined;\n let captchaToken = undefined;\n if ('options' in params) {\n redirectTo = (_a = params.options) === null || _a === void 0 ? void 0 : _a.redirectTo;\n captchaToken = (_b = params.options) === null || _b === void 0 ? void 0 : _b.captchaToken;\n }\n const { data, error } = await _request(this.fetch, 'POST', `${this.url}/verify`, {\n headers: this.headers,\n body: Object.assign(Object.assign({}, params), { gotrue_meta_security: { captcha_token: captchaToken } }),\n redirectTo,\n xform: _sessionResponse,\n });\n if (error) {\n throw error;\n }\n if (!data) {\n throw new Error('An error occurred on token verification.');\n }\n const session = data.session;\n const user = data.user;\n if (session === null || session === void 0 ? void 0 : session.access_token) {\n await this._saveSession(session);\n await this._notifyAllSubscribers(params.type == 'recovery' ? 'PASSWORD_RECOVERY' : 'SIGNED_IN', session);\n }\n return { data: { user, session }, error: null };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null, session: null }, error };\n }\n throw error;\n }\n }\n /**\n * Attempts a single-sign on using an enterprise Identity Provider. A\n * successful SSO attempt will redirect the current page to the identity\n * provider authorization page. The redirect URL is implementation and SSO\n * protocol specific.\n *\n * You can use it by providing a SSO domain. Typically you can extract this\n * domain by asking users for their email address. If this domain is\n * registered on the Auth instance the redirect will use that organization's\n * currently active SSO Identity Provider for the login.\n *\n * If you have built an organization-specific login page, you can use the\n * organization's SSO Identity Provider UUID directly instead.\n */\n async signInWithSSO(params) {\n var _a, _b, _c;\n try {\n let codeChallenge = null;\n let codeChallengeMethod = null;\n if (this.flowType === 'pkce') {\n ;\n [codeChallenge, codeChallengeMethod] = await getCodeChallengeAndMethod(this.storage, this.storageKey);\n }\n return await _request(this.fetch, 'POST', `${this.url}/sso`, {\n body: Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, ('providerId' in params ? { provider_id: params.providerId } : null)), ('domain' in params ? { domain: params.domain } : null)), { redirect_to: (_b = (_a = params.options) === null || _a === void 0 ? void 0 : _a.redirectTo) !== null && _b !== void 0 ? _b : undefined }), (((_c = params === null || params === void 0 ? void 0 : params.options) === null || _c === void 0 ? void 0 : _c.captchaToken)\n ? { gotrue_meta_security: { captcha_token: params.options.captchaToken } }\n : null)), { skip_http_redirect: true, code_challenge: codeChallenge, code_challenge_method: codeChallengeMethod }),\n headers: this.headers,\n xform: _ssoResponse,\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Sends a reauthentication OTP to the user's email or phone number.\n * Requires the user to be signed-in.\n */\n async reauthenticate() {\n await this.initializePromise;\n return await this._acquireLock(-1, async () => {\n return await this._reauthenticate();\n });\n }\n async _reauthenticate() {\n try {\n return await this._useSession(async (result) => {\n const { data: { session }, error: sessionError, } = result;\n if (sessionError)\n throw sessionError;\n if (!session)\n throw new AuthSessionMissingError();\n const { error } = await _request(this.fetch, 'GET', `${this.url}/reauthenticate`, {\n headers: this.headers,\n jwt: session.access_token,\n });\n return { data: { user: null, session: null }, error };\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null, session: null }, error };\n }\n throw error;\n }\n }\n /**\n * Resends an existing signup confirmation email, email change email, SMS OTP or phone change OTP.\n */\n async resend(credentials) {\n try {\n const endpoint = `${this.url}/resend`;\n if ('email' in credentials) {\n const { email, type, options } = credentials;\n const { error } = await _request(this.fetch, 'POST', endpoint, {\n headers: this.headers,\n body: {\n email,\n type,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n },\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\n });\n return { data: { user: null, session: null }, error };\n }\n else if ('phone' in credentials) {\n const { phone, type, options } = credentials;\n const { data, error } = await _request(this.fetch, 'POST', endpoint, {\n headers: this.headers,\n body: {\n phone,\n type,\n gotrue_meta_security: { captcha_token: options === null || options === void 0 ? void 0 : options.captchaToken },\n },\n });\n return { data: { user: null, session: null, messageId: data === null || data === void 0 ? void 0 : data.message_id }, error };\n }\n throw new AuthInvalidCredentialsError('You must provide either an email or phone number and a type');\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null, session: null }, error };\n }\n throw error;\n }\n }\n /**\n * Returns the session, refreshing it if necessary.\n *\n * The session returned can be null if the session is not detected which can happen in the event a user is not signed-in or has logged out.\n *\n * **IMPORTANT:** This method loads values directly from the storage attached\n * to the client. If that storage is based on request cookies for example,\n * the values in it may not be authentic and therefore it's strongly advised\n * against using this method and its results in such circumstances. A warning\n * will be emitted if this is detected. Use {@link #getUser()} instead.\n */\n async getSession() {\n await this.initializePromise;\n const result = await this._acquireLock(-1, async () => {\n return this._useSession(async (result) => {\n return result;\n });\n });\n return result;\n }\n /**\n * Acquires a global lock based on the storage key.\n */\n async _acquireLock(acquireTimeout, fn) {\n this._debug('#_acquireLock', 'begin', acquireTimeout);\n try {\n if (this.lockAcquired) {\n const last = this.pendingInLock.length\n ? this.pendingInLock[this.pendingInLock.length - 1]\n : Promise.resolve();\n const result = (async () => {\n await last;\n return await fn();\n })();\n this.pendingInLock.push((async () => {\n try {\n await result;\n }\n catch (e) {\n // we just care if it finished\n }\n })());\n return result;\n }\n return await this.lock(`lock:${this.storageKey}`, acquireTimeout, async () => {\n this._debug('#_acquireLock', 'lock acquired for storage key', this.storageKey);\n try {\n this.lockAcquired = true;\n const result = fn();\n this.pendingInLock.push((async () => {\n try {\n await result;\n }\n catch (e) {\n // we just care if it finished\n }\n })());\n await result;\n // keep draining the queue until there's nothing to wait on\n while (this.pendingInLock.length) {\n const waitOn = [...this.pendingInLock];\n await Promise.all(waitOn);\n this.pendingInLock.splice(0, waitOn.length);\n }\n return await result;\n }\n finally {\n this._debug('#_acquireLock', 'lock released for storage key', this.storageKey);\n this.lockAcquired = false;\n }\n });\n }\n finally {\n this._debug('#_acquireLock', 'end');\n }\n }\n /**\n * Use instead of {@link #getSession} inside the library. It is\n * semantically usually what you want, as getting a session involves some\n * processing afterwards that requires only one client operating on the\n * session at once across multiple tabs or processes.\n */\n async _useSession(fn) {\n this._debug('#_useSession', 'begin');\n try {\n // the use of __loadSession here is the only correct use of the function!\n const result = await this.__loadSession();\n return await fn(result);\n }\n finally {\n this._debug('#_useSession', 'end');\n }\n }\n /**\n * NEVER USE DIRECTLY!\n *\n * Always use {@link #_useSession}.\n */\n async __loadSession() {\n this._debug('#__loadSession()', 'begin');\n if (!this.lockAcquired) {\n this._debug('#__loadSession()', 'used outside of an acquired lock!', new Error().stack);\n }\n try {\n let currentSession = null;\n const maybeSession = await getItemAsync(this.storage, this.storageKey);\n this._debug('#getSession()', 'session from storage', maybeSession);\n if (maybeSession !== null) {\n if (this._isValidSession(maybeSession)) {\n currentSession = maybeSession;\n }\n else {\n this._debug('#getSession()', 'session from storage is not valid');\n await this._removeSession();\n }\n }\n if (!currentSession) {\n return { data: { session: null }, error: null };\n }\n // A session is considered expired before the access token _actually_\n // expires. When the autoRefreshToken option is off (or when the tab is\n // in the background), very eager users of getSession() -- like\n // realtime-js -- might send a valid JWT which will expire by the time it\n // reaches the server.\n const hasExpired = currentSession.expires_at\n ? currentSession.expires_at * 1000 - Date.now() < EXPIRY_MARGIN_MS\n : false;\n this._debug('#__loadSession()', `session has${hasExpired ? '' : ' not'} expired`, 'expires_at', currentSession.expires_at);\n if (!hasExpired) {\n if (this.storage.isServer) {\n let suppressWarning = this.suppressGetSessionWarning;\n const proxySession = new Proxy(currentSession, {\n get: (target, prop, receiver) => {\n if (!suppressWarning && prop === 'user') {\n // only show warning when the user object is being accessed from the server\n console.warn('Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server.');\n suppressWarning = true; // keeps this proxy instance from logging additional warnings\n this.suppressGetSessionWarning = true; // keeps this client's future proxy instances from warning\n }\n return Reflect.get(target, prop, receiver);\n },\n });\n currentSession = proxySession;\n }\n return { data: { session: currentSession }, error: null };\n }\n const { session, error } = await this._callRefreshToken(currentSession.refresh_token);\n if (error) {\n return { data: { session: null }, error };\n }\n return { data: { session }, error: null };\n }\n finally {\n this._debug('#__loadSession()', 'end');\n }\n }\n /**\n * Gets the current user details if there is an existing session. This method\n * performs a network request to the Supabase Auth server, so the returned\n * value is authentic and can be used to base authorization rules on.\n *\n * @param jwt Takes in an optional access token JWT. If no JWT is provided, the JWT from the current session is used.\n */\n async getUser(jwt) {\n if (jwt) {\n return await this._getUser(jwt);\n }\n await this.initializePromise;\n const result = await this._acquireLock(-1, async () => {\n return await this._getUser();\n });\n return result;\n }\n async _getUser(jwt) {\n try {\n if (jwt) {\n return await _request(this.fetch, 'GET', `${this.url}/user`, {\n headers: this.headers,\n jwt: jwt,\n xform: _userResponse,\n });\n }\n return await this._useSession(async (result) => {\n var _a, _b, _c;\n const { data, error } = result;\n if (error) {\n throw error;\n }\n // returns an error if there is no access_token or custom authorization header\n if (!((_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) && !this.hasCustomAuthorizationHeader) {\n return { data: { user: null }, error: new AuthSessionMissingError() };\n }\n return await _request(this.fetch, 'GET', `${this.url}/user`, {\n headers: this.headers,\n jwt: (_c = (_b = data.session) === null || _b === void 0 ? void 0 : _b.access_token) !== null && _c !== void 0 ? _c : undefined,\n xform: _userResponse,\n });\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n if (isAuthSessionMissingError(error)) {\n // JWT contains a `session_id` which does not correspond to an active\n // session in the database, indicating the user is signed out.\n await this._removeSession();\n await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`);\n }\n return { data: { user: null }, error };\n }\n throw error;\n }\n }\n /**\n * Updates user data for a logged in user.\n */\n async updateUser(attributes, options = {}) {\n await this.initializePromise;\n return await this._acquireLock(-1, async () => {\n return await this._updateUser(attributes, options);\n });\n }\n async _updateUser(attributes, options = {}) {\n try {\n return await this._useSession(async (result) => {\n const { data: sessionData, error: sessionError } = result;\n if (sessionError) {\n throw sessionError;\n }\n if (!sessionData.session) {\n throw new AuthSessionMissingError();\n }\n const session = sessionData.session;\n let codeChallenge = null;\n let codeChallengeMethod = null;\n if (this.flowType === 'pkce' && attributes.email != null) {\n ;\n [codeChallenge, codeChallengeMethod] = await getCodeChallengeAndMethod(this.storage, this.storageKey);\n }\n const { data, error: userError } = await _request(this.fetch, 'PUT', `${this.url}/user`, {\n headers: this.headers,\n redirectTo: options === null || options === void 0 ? void 0 : options.emailRedirectTo,\n body: Object.assign(Object.assign({}, attributes), { code_challenge: codeChallenge, code_challenge_method: codeChallengeMethod }),\n jwt: session.access_token,\n xform: _userResponse,\n });\n if (userError)\n throw userError;\n session.user = data.user;\n await this._saveSession(session);\n await this._notifyAllSubscribers('USER_UPDATED', session);\n return { data: { user: session.user }, error: null };\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null }, error };\n }\n throw error;\n }\n }\n /**\n * Decodes a JWT (without performing any validation).\n */\n _decodeJWT(jwt) {\n return decodeJWTPayload(jwt);\n }\n /**\n * Sets the session data from the current session. If the current session is expired, setSession will take care of refreshing it to obtain a new session.\n * If the refresh token or access token in the current session is invalid, an error will be thrown.\n * @param currentSession The current session that minimally contains an access token and refresh token.\n */\n async setSession(currentSession) {\n await this.initializePromise;\n return await this._acquireLock(-1, async () => {\n return await this._setSession(currentSession);\n });\n }\n async _setSession(currentSession) {\n try {\n if (!currentSession.access_token || !currentSession.refresh_token) {\n throw new AuthSessionMissingError();\n }\n const timeNow = Date.now() / 1000;\n let expiresAt = timeNow;\n let hasExpired = true;\n let session = null;\n const payload = decodeJWTPayload(currentSession.access_token);\n if (payload.exp) {\n expiresAt = payload.exp;\n hasExpired = expiresAt <= timeNow;\n }\n if (hasExpired) {\n const { session: refreshedSession, error } = await this._callRefreshToken(currentSession.refresh_token);\n if (error) {\n return { data: { user: null, session: null }, error: error };\n }\n if (!refreshedSession) {\n return { data: { user: null, session: null }, error: null };\n }\n session = refreshedSession;\n }\n else {\n const { data, error } = await this._getUser(currentSession.access_token);\n if (error) {\n throw error;\n }\n session = {\n access_token: currentSession.access_token,\n refresh_token: currentSession.refresh_token,\n user: data.user,\n token_type: 'bearer',\n expires_in: expiresAt - timeNow,\n expires_at: expiresAt,\n };\n await this._saveSession(session);\n await this._notifyAllSubscribers('SIGNED_IN', session);\n }\n return { data: { user: session.user, session }, error: null };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { session: null, user: null }, error };\n }\n throw error;\n }\n }\n /**\n * Returns a new session, regardless of expiry status.\n * Takes in an optional current session. If not passed in, then refreshSession() will attempt to retrieve it from getSession().\n * If the current session's refresh token is invalid, an error will be thrown.\n * @param currentSession The current session. If passed in, it must contain a refresh token.\n */\n async refreshSession(currentSession) {\n await this.initializePromise;\n return await this._acquireLock(-1, async () => {\n return await this._refreshSession(currentSession);\n });\n }\n async _refreshSession(currentSession) {\n try {\n return await this._useSession(async (result) => {\n var _a;\n if (!currentSession) {\n const { data, error } = result;\n if (error) {\n throw error;\n }\n currentSession = (_a = data.session) !== null && _a !== void 0 ? _a : undefined;\n }\n if (!(currentSession === null || currentSession === void 0 ? void 0 : currentSession.refresh_token)) {\n throw new AuthSessionMissingError();\n }\n const { session, error } = await this._callRefreshToken(currentSession.refresh_token);\n if (error) {\n return { data: { user: null, session: null }, error: error };\n }\n if (!session) {\n return { data: { user: null, session: null }, error: null };\n }\n return { data: { user: session.user, session }, error: null };\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { user: null, session: null }, error };\n }\n throw error;\n }\n }\n /**\n * Gets the session data from a URL string\n */\n async _getSessionFromURL(params, callbackUrlType) {\n try {\n if (!isBrowser())\n throw new AuthImplicitGrantRedirectError('No browser detected.');\n // If there's an error in the URL, it doesn't matter what flow it is, we just return the error.\n if (params.error || params.error_description || params.error_code) {\n // The error class returned implies that the redirect is from an implicit grant flow\n // but it could also be from a redirect error from a PKCE flow.\n throw new AuthImplicitGrantRedirectError(params.error_description || 'Error in URL with unspecified error_description', {\n error: params.error || 'unspecified_error',\n code: params.error_code || 'unspecified_code',\n });\n }\n // Checks for mismatches between the flowType initialised in the client and the URL parameters\n switch (callbackUrlType) {\n case 'implicit':\n if (this.flowType === 'pkce') {\n throw new AuthPKCEGrantCodeExchangeError('Not a valid PKCE flow url.');\n }\n break;\n case 'pkce':\n if (this.flowType === 'implicit') {\n throw new AuthImplicitGrantRedirectError('Not a valid implicit grant flow url.');\n }\n break;\n default:\n // there's no mismatch so we continue\n }\n // Since this is a redirect for PKCE, we attempt to retrieve the code from the URL for the code exchange\n if (callbackUrlType === 'pkce') {\n this._debug('#_initialize()', 'begin', 'is PKCE flow', true);\n if (!params.code)\n throw new AuthPKCEGrantCodeExchangeError('No code detected.');\n const { data, error } = await this._exchangeCodeForSession(params.code);\n if (error)\n throw error;\n const url = new URL(window.location.href);\n url.searchParams.delete('code');\n window.history.replaceState(window.history.state, '', url.toString());\n return { data: { session: data.session, redirectType: null }, error: null };\n }\n const { provider_token, provider_refresh_token, access_token, refresh_token, expires_in, expires_at, token_type, } = params;\n if (!access_token || !expires_in || !refresh_token || !token_type) {\n throw new AuthImplicitGrantRedirectError('No session defined in URL');\n }\n const timeNow = Math.round(Date.now() / 1000);\n const expiresIn = parseInt(expires_in);\n let expiresAt = timeNow + expiresIn;\n if (expires_at) {\n expiresAt = parseInt(expires_at);\n }\n const actuallyExpiresIn = expiresAt - timeNow;\n if (actuallyExpiresIn * 1000 <= AUTO_REFRESH_TICK_DURATION_MS) {\n console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${actuallyExpiresIn}s, should have been closer to ${expiresIn}s`);\n }\n const issuedAt = expiresAt - expiresIn;\n if (timeNow - issuedAt >= 120) {\n console.warn('@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale', issuedAt, expiresAt, timeNow);\n }\n else if (timeNow - issuedAt < 0) {\n console.warn('@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew', issuedAt, expiresAt, timeNow);\n }\n const { data, error } = await this._getUser(access_token);\n if (error)\n throw error;\n const session = {\n provider_token,\n provider_refresh_token,\n access_token,\n expires_in: expiresIn,\n expires_at: expiresAt,\n refresh_token,\n token_type,\n user: data.user,\n };\n // Remove tokens from URL\n window.location.hash = '';\n this._debug('#_getSessionFromURL()', 'clearing window.location.hash');\n return { data: { session, redirectType: params.type }, error: null };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { session: null, redirectType: null }, error };\n }\n throw error;\n }\n }\n /**\n * Checks if the current URL contains parameters given by an implicit oauth grant flow (https://www.rfc-editor.org/rfc/rfc6749.html#section-4.2)\n */\n _isImplicitGrantCallback(params) {\n return Boolean(params.access_token || params.error_description);\n }\n /**\n * Checks if the current URL and backing storage contain parameters given by a PKCE flow\n */\n async _isPKCECallback(params) {\n const currentStorageContent = await getItemAsync(this.storage, `${this.storageKey}-code-verifier`);\n return !!(params.code && currentStorageContent);\n }\n /**\n * Inside a browser context, `signOut()` will remove the logged in user from the browser session and log them out - removing all items from localstorage and then trigger a `\"SIGNED_OUT\"` event.\n *\n * For server-side management, you can revoke all refresh tokens for a user by passing a user's JWT through to `auth.api.signOut(JWT: string)`.\n * There is no way to revoke a user's access token jwt until it expires. It is recommended to set a shorter expiry on the jwt for this reason.\n *\n * If using `others` scope, no `SIGNED_OUT` event is fired!\n */\n async signOut(options = { scope: 'global' }) {\n await this.initializePromise;\n return await this._acquireLock(-1, async () => {\n return await this._signOut(options);\n });\n }\n async _signOut({ scope } = { scope: 'global' }) {\n return await this._useSession(async (result) => {\n var _a;\n const { data, error: sessionError } = result;\n if (sessionError) {\n return { error: sessionError };\n }\n const accessToken = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token;\n if (accessToken) {\n const { error } = await this.admin.signOut(accessToken, scope);\n if (error) {\n // ignore 404s since user might not exist anymore\n // ignore 401s since an invalid or expired JWT should sign out the current session\n if (!(isAuthApiError(error) &&\n (error.status === 404 || error.status === 401 || error.status === 403))) {\n return { error };\n }\n }\n }\n if (scope !== 'others') {\n await this._removeSession();\n await removeItemAsync(this.storage, `${this.storageKey}-code-verifier`);\n }\n return { error: null };\n });\n }\n /**\n * Receive a notification every time an auth event happens.\n * @param callback A callback function to be invoked when an auth event happens.\n */\n onAuthStateChange(callback) {\n const id = uuid();\n const subscription = {\n id,\n callback,\n unsubscribe: () => {\n this._debug('#unsubscribe()', 'state change callback with id removed', id);\n this.stateChangeEmitters.delete(id);\n },\n };\n this._debug('#onAuthStateChange()', 'registered callback with id', id);\n this.stateChangeEmitters.set(id, subscription);\n (async () => {\n await this.initializePromise;\n await this._acquireLock(-1, async () => {\n this._emitInitialSession(id);\n });\n })();\n return { data: { subscription } };\n }\n async _emitInitialSession(id) {\n return await this._useSession(async (result) => {\n var _a, _b;\n try {\n const { data: { session }, error, } = result;\n if (error)\n throw error;\n await ((_a = this.stateChangeEmitters.get(id)) === null || _a === void 0 ? void 0 : _a.callback('INITIAL_SESSION', session));\n this._debug('INITIAL_SESSION', 'callback id', id, 'session', session);\n }\n catch (err) {\n await ((_b = this.stateChangeEmitters.get(id)) === null || _b === void 0 ? void 0 : _b.callback('INITIAL_SESSION', null));\n this._debug('INITIAL_SESSION', 'callback id', id, 'error', err);\n console.error(err);\n }\n });\n }\n /**\n * Sends a password reset request to an email address. This method supports the PKCE flow.\n *\n * @param email The email address of the user.\n * @param options.redirectTo The URL to send the user to after they click the password reset link.\n * @param options.captchaToken Verification token received when the user completes the captcha on the site.\n */\n async resetPasswordForEmail(email, options = {}) {\n let codeChallenge = null;\n let codeChallengeMethod = null;\n if (this.flowType === 'pkce') {\n ;\n [codeChallenge, codeChallengeMethod] = await getCodeChallengeAndMethod(this.storage, this.storageKey, true // isPasswordRecovery\n );\n }\n try {\n return await _request(this.fetch, 'POST', `${this.url}/recover`, {\n body: {\n email,\n code_challenge: codeChallenge,\n code_challenge_method: codeChallengeMethod,\n gotrue_meta_security: { captcha_token: options.captchaToken },\n },\n headers: this.headers,\n redirectTo: options.redirectTo,\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Gets all the identities linked to a user.\n */\n async getUserIdentities() {\n var _a;\n try {\n const { data, error } = await this.getUser();\n if (error)\n throw error;\n return { data: { identities: (_a = data.user.identities) !== null && _a !== void 0 ? _a : [] }, error: null };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Links an oauth identity to an existing user.\n * This method supports the PKCE flow.\n */\n async linkIdentity(credentials) {\n var _a;\n try {\n const { data, error } = await this._useSession(async (result) => {\n var _a, _b, _c, _d, _e;\n const { data, error } = result;\n if (error)\n throw error;\n const url = await this._getUrlForProvider(`${this.url}/user/identities/authorize`, credentials.provider, {\n redirectTo: (_a = credentials.options) === null || _a === void 0 ? void 0 : _a.redirectTo,\n scopes: (_b = credentials.options) === null || _b === void 0 ? void 0 : _b.scopes,\n queryParams: (_c = credentials.options) === null || _c === void 0 ? void 0 : _c.queryParams,\n skipBrowserRedirect: true,\n });\n return await _request(this.fetch, 'GET', url, {\n headers: this.headers,\n jwt: (_e = (_d = data.session) === null || _d === void 0 ? void 0 : _d.access_token) !== null && _e !== void 0 ? _e : undefined,\n });\n });\n if (error)\n throw error;\n if (isBrowser() && !((_a = credentials.options) === null || _a === void 0 ? void 0 : _a.skipBrowserRedirect)) {\n window.location.assign(data === null || data === void 0 ? void 0 : data.url);\n }\n return { data: { provider: credentials.provider, url: data === null || data === void 0 ? void 0 : data.url }, error: null };\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: { provider: credentials.provider, url: null }, error };\n }\n throw error;\n }\n }\n /**\n * Unlinks an identity from a user by deleting it. The user will no longer be able to sign in with that identity once it's unlinked.\n */\n async unlinkIdentity(identity) {\n try {\n return await this._useSession(async (result) => {\n var _a, _b;\n const { data, error } = result;\n if (error) {\n throw error;\n }\n return await _request(this.fetch, 'DELETE', `${this.url}/user/identities/${identity.identity_id}`, {\n headers: this.headers,\n jwt: (_b = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) !== null && _b !== void 0 ? _b : undefined,\n });\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * Generates a new JWT.\n * @param refreshToken A valid refresh token that was returned on login.\n */\n async _refreshAccessToken(refreshToken) {\n const debugName = `#_refreshAccessToken(${refreshToken.substring(0, 5)}...)`;\n this._debug(debugName, 'begin');\n try {\n const startedAt = Date.now();\n // will attempt to refresh the token with exponential backoff\n return await retryable(async (attempt) => {\n if (attempt > 0) {\n await sleep(200 * Math.pow(2, attempt - 1)); // 200, 400, 800, ...\n }\n this._debug(debugName, 'refreshing attempt', attempt);\n return await _request(this.fetch, 'POST', `${this.url}/token?grant_type=refresh_token`, {\n body: { refresh_token: refreshToken },\n headers: this.headers,\n xform: _sessionResponse,\n });\n }, (attempt, error) => {\n const nextBackOffInterval = 200 * Math.pow(2, attempt);\n return (error &&\n isAuthRetryableFetchError(error) &&\n // retryable only if the request can be sent before the backoff overflows the tick duration\n Date.now() + nextBackOffInterval - startedAt < AUTO_REFRESH_TICK_DURATION_MS);\n });\n }\n catch (error) {\n this._debug(debugName, 'error', error);\n if (isAuthError(error)) {\n return { data: { session: null, user: null }, error };\n }\n throw error;\n }\n finally {\n this._debug(debugName, 'end');\n }\n }\n _isValidSession(maybeSession) {\n const isValidSession = typeof maybeSession === 'object' &&\n maybeSession !== null &&\n 'access_token' in maybeSession &&\n 'refresh_token' in maybeSession &&\n 'expires_at' in maybeSession;\n return isValidSession;\n }\n async _handleProviderSignIn(provider, options) {\n const url = await this._getUrlForProvider(`${this.url}/authorize`, provider, {\n redirectTo: options.redirectTo,\n scopes: options.scopes,\n queryParams: options.queryParams,\n });\n this._debug('#_handleProviderSignIn()', 'provider', provider, 'options', options, 'url', url);\n // try to open on the browser\n if (isBrowser() && !options.skipBrowserRedirect) {\n window.location.assign(url);\n }\n return { data: { provider, url }, error: null };\n }\n /**\n * Recovers the session from LocalStorage and refreshes the token\n * Note: this method is async to accommodate for AsyncStorage e.g. in React native.\n */\n async _recoverAndRefresh() {\n var _a;\n const debugName = '#_recoverAndRefresh()';\n this._debug(debugName, 'begin');\n try {\n const currentSession = await getItemAsync(this.storage, this.storageKey);\n this._debug(debugName, 'session from storage', currentSession);\n if (!this._isValidSession(currentSession)) {\n this._debug(debugName, 'session is not valid');\n if (currentSession !== null) {\n await this._removeSession();\n }\n return;\n }\n const expiresWithMargin = ((_a = currentSession.expires_at) !== null && _a !== void 0 ? _a : Infinity) * 1000 - Date.now() < EXPIRY_MARGIN_MS;\n this._debug(debugName, `session has${expiresWithMargin ? '' : ' not'} expired with margin of ${EXPIRY_MARGIN_MS}s`);\n if (expiresWithMargin) {\n if (this.autoRefreshToken && currentSession.refresh_token) {\n const { error } = await this._callRefreshToken(currentSession.refresh_token);\n if (error) {\n console.error(error);\n if (!isAuthRetryableFetchError(error)) {\n this._debug(debugName, 'refresh failed with a non-retryable error, removing the session', error);\n await this._removeSession();\n }\n }\n }\n }\n else {\n // no need to persist currentSession again, as we just loaded it from\n // local storage; persisting it again may overwrite a value saved by\n // another client with access to the same local storage\n await this._notifyAllSubscribers('SIGNED_IN', currentSession);\n }\n }\n catch (err) {\n this._debug(debugName, 'error', err);\n console.error(err);\n return;\n }\n finally {\n this._debug(debugName, 'end');\n }\n }\n async _callRefreshToken(refreshToken) {\n var _a, _b;\n if (!refreshToken) {\n throw new AuthSessionMissingError();\n }\n // refreshing is already in progress\n if (this.refreshingDeferred) {\n return this.refreshingDeferred.promise;\n }\n const debugName = `#_callRefreshToken(${refreshToken.substring(0, 5)}...)`;\n this._debug(debugName, 'begin');\n try {\n this.refreshingDeferred = new Deferred();\n const { data, error } = await this._refreshAccessToken(refreshToken);\n if (error)\n throw error;\n if (!data.session)\n throw new AuthSessionMissingError();\n await this._saveSession(data.session);\n await this._notifyAllSubscribers('TOKEN_REFRESHED', data.session);\n const result = { session: data.session, error: null };\n this.refreshingDeferred.resolve(result);\n return result;\n }\n catch (error) {\n this._debug(debugName, 'error', error);\n if (isAuthError(error)) {\n const result = { session: null, error };\n if (!isAuthRetryableFetchError(error)) {\n await this._removeSession();\n }\n (_a = this.refreshingDeferred) === null || _a === void 0 ? void 0 : _a.resolve(result);\n return result;\n }\n (_b = this.refreshingDeferred) === null || _b === void 0 ? void 0 : _b.reject(error);\n throw error;\n }\n finally {\n this.refreshingDeferred = null;\n this._debug(debugName, 'end');\n }\n }\n async _notifyAllSubscribers(event, session, broadcast = true) {\n const debugName = `#_notifyAllSubscribers(${event})`;\n this._debug(debugName, 'begin', session, `broadcast = ${broadcast}`);\n try {\n if (this.broadcastChannel && broadcast) {\n this.broadcastChannel.postMessage({ event, session });\n }\n const errors = [];\n const promises = Array.from(this.stateChangeEmitters.values()).map(async (x) => {\n try {\n await x.callback(event, session);\n }\n catch (e) {\n errors.push(e);\n }\n });\n await Promise.all(promises);\n if (errors.length > 0) {\n for (let i = 0; i < errors.length; i += 1) {\n console.error(errors[i]);\n }\n throw errors[0];\n }\n }\n finally {\n this._debug(debugName, 'end');\n }\n }\n /**\n * set currentSession and currentUser\n * process to _startAutoRefreshToken if possible\n */\n async _saveSession(session) {\n this._debug('#_saveSession()', session);\n // _saveSession is always called whenever a new session has been acquired\n // so we can safely suppress the warning returned by future getSession calls\n this.suppressGetSessionWarning = true;\n await setItemAsync(this.storage, this.storageKey, session);\n }\n async _removeSession() {\n this._debug('#_removeSession()');\n await removeItemAsync(this.storage, this.storageKey);\n await this._notifyAllSubscribers('SIGNED_OUT', null);\n }\n /**\n * Removes any registered visibilitychange callback.\n *\n * {@see #startAutoRefresh}\n * {@see #stopAutoRefresh}\n */\n _removeVisibilityChangedCallback() {\n this._debug('#_removeVisibilityChangedCallback()');\n const callback = this.visibilityChangedCallback;\n this.visibilityChangedCallback = null;\n try {\n if (callback && isBrowser() && (window === null || window === void 0 ? void 0 : window.removeEventListener)) {\n window.removeEventListener('visibilitychange', callback);\n }\n }\n catch (e) {\n console.error('removing visibilitychange callback failed', e);\n }\n }\n /**\n * This is the private implementation of {@link #startAutoRefresh}. Use this\n * within the library.\n */\n async _startAutoRefresh() {\n await this._stopAutoRefresh();\n this._debug('#_startAutoRefresh()');\n const ticker = setInterval(() => this._autoRefreshTokenTick(), AUTO_REFRESH_TICK_DURATION_MS);\n this.autoRefreshTicker = ticker;\n if (ticker && typeof ticker === 'object' && typeof ticker.unref === 'function') {\n // ticker is a NodeJS Timeout object that has an `unref` method\n // https://nodejs.org/api/timers.html#timeoutunref\n // When auto refresh is used in NodeJS (like for testing) the\n // `setInterval` is preventing the process from being marked as\n // finished and tests run endlessly. This can be prevented by calling\n // `unref()` on the returned object.\n ticker.unref();\n // @ts-expect-error TS has no context of Deno\n }\n else if (typeof Deno !== 'undefined' && typeof Deno.unrefTimer === 'function') {\n // similar like for NodeJS, but with the Deno API\n // https://deno.land/api@latest?unstable&s=Deno.unrefTimer\n // @ts-expect-error TS has no context of Deno\n Deno.unrefTimer(ticker);\n }\n // run the tick immediately, but in the next pass of the event loop so that\n // #_initialize can be allowed to complete without recursively waiting on\n // itself\n setTimeout(async () => {\n await this.initializePromise;\n await this._autoRefreshTokenTick();\n }, 0);\n }\n /**\n * This is the private implementation of {@link #stopAutoRefresh}. Use this\n * within the library.\n */\n async _stopAutoRefresh() {\n this._debug('#_stopAutoRefresh()');\n const ticker = this.autoRefreshTicker;\n this.autoRefreshTicker = null;\n if (ticker) {\n clearInterval(ticker);\n }\n }\n /**\n * Starts an auto-refresh process in the background. The session is checked\n * every few seconds. Close to the time of expiration a process is started to\n * refresh the session. If refreshing fails it will be retried for as long as\n * necessary.\n *\n * If you set the {@link GoTrueClientOptions#autoRefreshToken} you don't need\n * to call this function, it will be called for you.\n *\n * On browsers the refresh process works only when the tab/window is in the\n * foreground to conserve resources as well as prevent race conditions and\n * flooding auth with requests. If you call this method any managed\n * visibility change callback will be removed and you must manage visibility\n * changes on your own.\n *\n * On non-browser platforms the refresh process works *continuously* in the\n * background, which may not be desirable. You should hook into your\n * platform's foreground indication mechanism and call these methods\n * appropriately to conserve resources.\n *\n * {@see #stopAutoRefresh}\n */\n async startAutoRefresh() {\n this._removeVisibilityChangedCallback();\n await this._startAutoRefresh();\n }\n /**\n * Stops an active auto refresh process running in the background (if any).\n *\n * If you call this method any managed visibility change callback will be\n * removed and you must manage visibility changes on your own.\n *\n * See {@link #startAutoRefresh} for more details.\n */\n async stopAutoRefresh() {\n this._removeVisibilityChangedCallback();\n await this._stopAutoRefresh();\n }\n /**\n * Runs the auto refresh token tick.\n */\n async _autoRefreshTokenTick() {\n this._debug('#_autoRefreshTokenTick()', 'begin');\n try {\n await this._acquireLock(0, async () => {\n try {\n const now = Date.now();\n try {\n return await this._useSession(async (result) => {\n const { data: { session }, } = result;\n if (!session || !session.refresh_token || !session.expires_at) {\n this._debug('#_autoRefreshTokenTick()', 'no session');\n return;\n }\n // session will expire in this many ticks (or has already expired if <= 0)\n const expiresInTicks = Math.floor((session.expires_at * 1000 - now) / AUTO_REFRESH_TICK_DURATION_MS);\n this._debug('#_autoRefreshTokenTick()', `access token expires in ${expiresInTicks} ticks, a tick lasts ${AUTO_REFRESH_TICK_DURATION_MS}ms, refresh threshold is ${AUTO_REFRESH_TICK_THRESHOLD} ticks`);\n if (expiresInTicks <= AUTO_REFRESH_TICK_THRESHOLD) {\n await this._callRefreshToken(session.refresh_token);\n }\n });\n }\n catch (e) {\n console.error('Auto refresh tick failed with error. This is likely a transient error.', e);\n }\n }\n finally {\n this._debug('#_autoRefreshTokenTick()', 'end');\n }\n });\n }\n catch (e) {\n if (e.isAcquireTimeout || e instanceof LockAcquireTimeoutError) {\n this._debug('auto refresh token tick lock not available');\n }\n else {\n throw e;\n }\n }\n }\n /**\n * Registers callbacks on the browser / platform, which in-turn run\n * algorithms when the browser window/tab are in foreground. On non-browser\n * platforms it assumes always foreground.\n */\n async _handleVisibilityChange() {\n this._debug('#_handleVisibilityChange()');\n if (!isBrowser() || !(window === null || window === void 0 ? void 0 : window.addEventListener)) {\n if (this.autoRefreshToken) {\n // in non-browser environments the refresh token ticker runs always\n this.startAutoRefresh();\n }\n return false;\n }\n try {\n this.visibilityChangedCallback = async () => await this._onVisibilityChanged(false);\n window === null || window === void 0 ? void 0 : window.addEventListener('visibilitychange', this.visibilityChangedCallback);\n // now immediately call the visbility changed callback to setup with the\n // current visbility state\n await this._onVisibilityChanged(true); // initial call\n }\n catch (error) {\n console.error('_handleVisibilityChange', error);\n }\n }\n /**\n * Callback registered with `window.addEventListener('visibilitychange')`.\n */\n async _onVisibilityChanged(calledFromInitialize) {\n const methodName = `#_onVisibilityChanged(${calledFromInitialize})`;\n this._debug(methodName, 'visibilityState', document.visibilityState);\n if (document.visibilityState === 'visible') {\n if (this.autoRefreshToken) {\n // in browser environments the refresh token ticker runs only on focused tabs\n // which prevents race conditions\n this._startAutoRefresh();\n }\n if (!calledFromInitialize) {\n // called when the visibility has changed, i.e. the browser\n // transitioned from hidden -> visible so we need to see if the session\n // should be recovered immediately... but to do that we need to acquire\n // the lock first asynchronously\n await this.initializePromise;\n await this._acquireLock(-1, async () => {\n if (document.visibilityState !== 'visible') {\n this._debug(methodName, 'acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting');\n // visibility has changed while waiting for the lock, abort\n return;\n }\n // recover the session\n await this._recoverAndRefresh();\n });\n }\n }\n else if (document.visibilityState === 'hidden') {\n if (this.autoRefreshToken) {\n this._stopAutoRefresh();\n }\n }\n }\n /**\n * Generates the relevant login URL for a third-party provider.\n * @param options.redirectTo A URL or mobile address to send the user to after they are confirmed.\n * @param options.scopes A space-separated list of scopes granted to the OAuth application.\n * @param options.queryParams An object of key-value pairs containing query parameters granted to the OAuth application.\n */\n async _getUrlForProvider(url, provider, options) {\n const urlParams = [`provider=${encodeURIComponent(provider)}`];\n if (options === null || options === void 0 ? void 0 : options.redirectTo) {\n urlParams.push(`redirect_to=${encodeURIComponent(options.redirectTo)}`);\n }\n if (options === null || options === void 0 ? void 0 : options.scopes) {\n urlParams.push(`scopes=${encodeURIComponent(options.scopes)}`);\n }\n if (this.flowType === 'pkce') {\n const [codeChallenge, codeChallengeMethod] = await getCodeChallengeAndMethod(this.storage, this.storageKey);\n const flowParams = new URLSearchParams({\n code_challenge: `${encodeURIComponent(codeChallenge)}`,\n code_challenge_method: `${encodeURIComponent(codeChallengeMethod)}`,\n });\n urlParams.push(flowParams.toString());\n }\n if (options === null || options === void 0 ? void 0 : options.queryParams) {\n const query = new URLSearchParams(options.queryParams);\n urlParams.push(query.toString());\n }\n if (options === null || options === void 0 ? void 0 : options.skipBrowserRedirect) {\n urlParams.push(`skip_http_redirect=${options.skipBrowserRedirect}`);\n }\n return `${url}?${urlParams.join('&')}`;\n }\n async _unenroll(params) {\n try {\n return await this._useSession(async (result) => {\n var _a;\n const { data: sessionData, error: sessionError } = result;\n if (sessionError) {\n return { data: null, error: sessionError };\n }\n return await _request(this.fetch, 'DELETE', `${this.url}/factors/${params.factorId}`, {\n headers: this.headers,\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\n });\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n async _enroll(params) {\n try {\n return await this._useSession(async (result) => {\n var _a, _b;\n const { data: sessionData, error: sessionError } = result;\n if (sessionError) {\n return { data: null, error: sessionError };\n }\n const body = Object.assign({ friendly_name: params.friendlyName, factor_type: params.factorType }, (params.factorType === 'phone' ? { phone: params.phone } : { issuer: params.issuer }));\n const { data, error } = await _request(this.fetch, 'POST', `${this.url}/factors`, {\n body,\n headers: this.headers,\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\n });\n if (error) {\n return { data: null, error };\n }\n if (params.factorType === 'totp' && ((_b = data === null || data === void 0 ? void 0 : data.totp) === null || _b === void 0 ? void 0 : _b.qr_code)) {\n data.totp.qr_code = `data:image/svg+xml;utf-8,${data.totp.qr_code}`;\n }\n return { data, error: null };\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n }\n /**\n * {@see GoTrueMFAApi#verify}\n */\n async _verify(params) {\n return this._acquireLock(-1, async () => {\n try {\n return await this._useSession(async (result) => {\n var _a;\n const { data: sessionData, error: sessionError } = result;\n if (sessionError) {\n return { data: null, error: sessionError };\n }\n const { data, error } = await _request(this.fetch, 'POST', `${this.url}/factors/${params.factorId}/verify`, {\n body: { code: params.code, challenge_id: params.challengeId },\n headers: this.headers,\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\n });\n if (error) {\n return { data: null, error };\n }\n await this._saveSession(Object.assign({ expires_at: Math.round(Date.now() / 1000) + data.expires_in }, data));\n await this._notifyAllSubscribers('MFA_CHALLENGE_VERIFIED', data);\n return { data, error };\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * {@see GoTrueMFAApi#challenge}\n */\n async _challenge(params) {\n return this._acquireLock(-1, async () => {\n try {\n return await this._useSession(async (result) => {\n var _a;\n const { data: sessionData, error: sessionError } = result;\n if (sessionError) {\n return { data: null, error: sessionError };\n }\n return await _request(this.fetch, 'POST', `${this.url}/factors/${params.factorId}/challenge`, {\n body: { channel: params.channel },\n headers: this.headers,\n jwt: (_a = sessionData === null || sessionData === void 0 ? void 0 : sessionData.session) === null || _a === void 0 ? void 0 : _a.access_token,\n });\n });\n }\n catch (error) {\n if (isAuthError(error)) {\n return { data: null, error };\n }\n throw error;\n }\n });\n }\n /**\n * {@see GoTrueMFAApi#challengeAndVerify}\n */\n async _challengeAndVerify(params) {\n // both _challenge and _verify independently acquire the lock, so no need\n // to acquire it here\n const { data: challengeData, error: challengeError } = await this._challenge({\n factorId: params.factorId,\n });\n if (challengeError) {\n return { data: null, error: challengeError };\n }\n return await this._verify({\n factorId: params.factorId,\n challengeId: challengeData.id,\n code: params.code,\n });\n }\n /**\n * {@see GoTrueMFAApi#listFactors}\n */\n async _listFactors() {\n // use #getUser instead of #_getUser as the former acquires a lock\n const { data: { user }, error: userError, } = await this.getUser();\n if (userError) {\n return { data: null, error: userError };\n }\n const factors = (user === null || user === void 0 ? void 0 : user.factors) || [];\n const totp = factors.filter((factor) => factor.factor_type === 'totp' && factor.status === 'verified');\n const phone = factors.filter((factor) => factor.factor_type === 'phone' && factor.status === 'verified');\n return {\n data: {\n all: factors,\n totp,\n phone,\n },\n error: null,\n };\n }\n /**\n * {@see GoTrueMFAApi#getAuthenticatorAssuranceLevel}\n */\n async _getAuthenticatorAssuranceLevel() {\n return this._acquireLock(-1, async () => {\n return await this._useSession(async (result) => {\n var _a, _b;\n const { data: { session }, error: sessionError, } = result;\n if (sessionError) {\n return { data: null, error: sessionError };\n }\n if (!session) {\n return {\n data: { currentLevel: null, nextLevel: null, currentAuthenticationMethods: [] },\n error: null,\n };\n }\n const payload = this._decodeJWT(session.access_token);\n let currentLevel = null;\n if (payload.aal) {\n currentLevel = payload.aal;\n }\n let nextLevel = currentLevel;\n const verifiedFactors = (_b = (_a = session.user.factors) === null || _a === void 0 ? void 0 : _a.filter((factor) => factor.status === 'verified')) !== null && _b !== void 0 ? _b : [];\n if (verifiedFactors.length > 0) {\n nextLevel = 'aal2';\n }\n const currentAuthenticationMethods = payload.amr || [];\n return { data: { currentLevel, nextLevel, currentAuthenticationMethods }, error: null };\n });\n });\n }\n}\nGoTrueClient.nextInstanceID = 0;\n//# sourceMappingURL=GoTrueClient.js.map","import GoTrueClient from './GoTrueClient';\nconst AuthClient = GoTrueClient;\nexport default AuthClient;\n//# sourceMappingURL=AuthClient.js.map","import { AuthClient } from '@supabase/auth-js';\nexport class SupabaseAuthClient extends AuthClient {\n constructor(options) {\n super(options);\n }\n}\n//# sourceMappingURL=SupabaseAuthClient.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nimport { FunctionsClient } from '@supabase/functions-js';\nimport { PostgrestClient, } from '@supabase/postgrest-js';\nimport { RealtimeClient, } from '@supabase/realtime-js';\nimport { StorageClient as SupabaseStorageClient } from '@supabase/storage-js';\nimport { DEFAULT_GLOBAL_OPTIONS, DEFAULT_DB_OPTIONS, DEFAULT_AUTH_OPTIONS, DEFAULT_REALTIME_OPTIONS, } from './lib/constants';\nimport { fetchWithAuth } from './lib/fetch';\nimport { stripTrailingSlash, applySettingDefaults } from './lib/helpers';\nimport { SupabaseAuthClient } from './lib/SupabaseAuthClient';\n/**\n * Supabase Client.\n *\n * An isomorphic Javascript client for interacting with Postgres.\n */\nexport default class SupabaseClient {\n /**\n * Create a new client for use in the browser.\n * @param supabaseUrl The unique Supabase URL which is supplied when you create a new project in your project dashboard.\n * @param supabaseKey The unique Supabase Key which is supplied when you create a new project in your project dashboard.\n * @param options.db.schema You can switch in between schemas. The schema needs to be on the list of exposed schemas inside Supabase.\n * @param options.auth.autoRefreshToken Set to \"true\" if you want to automatically refresh the token before expiring.\n * @param options.auth.persistSession Set to \"true\" if you want to automatically save the user session into local storage.\n * @param options.auth.detectSessionInUrl Set to \"true\" if you want to automatically detects OAuth grants in the URL and signs in the user.\n * @param options.realtime Options passed along to realtime-js constructor.\n * @param options.global.fetch A custom fetch implementation.\n * @param options.global.headers Any additional headers to send with each network request.\n */\n constructor(supabaseUrl, supabaseKey, options) {\n var _a, _b, _c;\n this.supabaseUrl = supabaseUrl;\n this.supabaseKey = supabaseKey;\n if (!supabaseUrl)\n throw new Error('supabaseUrl is required.');\n if (!supabaseKey)\n throw new Error('supabaseKey is required.');\n const _supabaseUrl = stripTrailingSlash(supabaseUrl);\n this.realtimeUrl = `${_supabaseUrl}/realtime/v1`.replace(/^http/i, 'ws');\n this.authUrl = `${_supabaseUrl}/auth/v1`;\n this.storageUrl = `${_supabaseUrl}/storage/v1`;\n this.functionsUrl = `${_supabaseUrl}/functions/v1`;\n // default storage key uses the supabase project ref as a namespace\n const defaultStorageKey = `sb-${new URL(this.authUrl).hostname.split('.')[0]}-auth-token`;\n const DEFAULTS = {\n db: DEFAULT_DB_OPTIONS,\n realtime: DEFAULT_REALTIME_OPTIONS,\n auth: Object.assign(Object.assign({}, DEFAULT_AUTH_OPTIONS), { storageKey: defaultStorageKey }),\n global: DEFAULT_GLOBAL_OPTIONS,\n };\n const settings = applySettingDefaults(options !== null && options !== void 0 ? options : {}, DEFAULTS);\n this.storageKey = (_a = settings.auth.storageKey) !== null && _a !== void 0 ? _a : '';\n this.headers = (_b = settings.global.headers) !== null && _b !== void 0 ? _b : {};\n if (!settings.accessToken) {\n this.auth = this._initSupabaseAuthClient((_c = settings.auth) !== null && _c !== void 0 ? _c : {}, this.headers, settings.global.fetch);\n }\n else {\n this.accessToken = settings.accessToken;\n this.auth = new Proxy({}, {\n get: (_, prop) => {\n throw new Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(prop)} is not possible`);\n },\n });\n }\n this.fetch = fetchWithAuth(supabaseKey, this._getAccessToken.bind(this), settings.global.fetch);\n this.realtime = this._initRealtimeClient(Object.assign({ headers: this.headers, accessToken: this._getAccessToken.bind(this) }, settings.realtime));\n this.rest = new PostgrestClient(`${_supabaseUrl}/rest/v1`, {\n headers: this.headers,\n schema: settings.db.schema,\n fetch: this.fetch,\n });\n if (!settings.accessToken) {\n this._listenForAuthEvents();\n }\n }\n /**\n * Supabase Functions allows you to deploy and invoke edge functions.\n */\n get functions() {\n return new FunctionsClient(this.functionsUrl, {\n headers: this.headers,\n customFetch: this.fetch,\n });\n }\n /**\n * Supabase Storage allows you to manage user-generated content, such as photos or videos.\n */\n get storage() {\n return new SupabaseStorageClient(this.storageUrl, this.headers, this.fetch);\n }\n /**\n * Perform a query on a table or a view.\n *\n * @param relation - The table or view name to query\n */\n from(relation) {\n return this.rest.from(relation);\n }\n // NOTE: signatures must be kept in sync with PostgrestClient.schema\n /**\n * Select a schema to query or perform an function (rpc) call.\n *\n * The schema needs to be on the list of exposed schemas inside Supabase.\n *\n * @param schema - The schema to query\n */\n schema(schema) {\n return this.rest.schema(schema);\n }\n // NOTE: signatures must be kept in sync with PostgrestClient.rpc\n /**\n * Perform a function call.\n *\n * @param fn - The function name to call\n * @param args - The arguments to pass to the function call\n * @param options - Named parameters\n * @param options.head - When set to `true`, `data` will not be returned.\n * Useful if you only need the count.\n * @param options.get - When set to `true`, the function will be called with\n * read-only access mode.\n * @param options.count - Count algorithm to use to count rows returned by the\n * function. Only applicable for [set-returning\n * functions](https://www.postgresql.org/docs/current/functions-srf.html).\n *\n * `\"exact\"`: Exact but slow count algorithm. Performs a `COUNT(*)` under the\n * hood.\n *\n * `\"planned\"`: Approximated but fast count algorithm. Uses the Postgres\n * statistics under the hood.\n *\n * `\"estimated\"`: Uses exact count for low numbers and planned count for high\n * numbers.\n */\n rpc(fn, args = {}, options = {}) {\n return this.rest.rpc(fn, args, options);\n }\n /**\n * Creates a Realtime channel with Broadcast, Presence, and Postgres Changes.\n *\n * @param {string} name - The name of the Realtime channel.\n * @param {Object} opts - The options to pass to the Realtime channel.\n *\n */\n channel(name, opts = { config: {} }) {\n return this.realtime.channel(name, opts);\n }\n /**\n * Returns all Realtime channels.\n */\n getChannels() {\n return this.realtime.getChannels();\n }\n /**\n * Unsubscribes and removes Realtime channel from Realtime client.\n *\n * @param {RealtimeChannel} channel - The name of the Realtime channel.\n *\n */\n removeChannel(channel) {\n return this.realtime.removeChannel(channel);\n }\n /**\n * Unsubscribes and removes all Realtime channels from Realtime client.\n */\n removeAllChannels() {\n return this.realtime.removeAllChannels();\n }\n _getAccessToken() {\n var _a, _b;\n return __awaiter(this, void 0, void 0, function* () {\n if (this.accessToken) {\n return yield this.accessToken();\n }\n const { data } = yield this.auth.getSession();\n return (_b = (_a = data.session) === null || _a === void 0 ? void 0 : _a.access_token) !== null && _b !== void 0 ? _b : null;\n });\n }\n _initSupabaseAuthClient({ autoRefreshToken, persistSession, detectSessionInUrl, storage, storageKey, flowType, lock, debug, }, headers, fetch) {\n const authHeaders = {\n Authorization: `Bearer ${this.supabaseKey}`,\n apikey: `${this.supabaseKey}`,\n };\n return new SupabaseAuthClient({\n url: this.authUrl,\n headers: Object.assign(Object.assign({}, authHeaders), headers),\n storageKey: storageKey,\n autoRefreshToken,\n persistSession,\n detectSessionInUrl,\n storage,\n flowType,\n lock,\n debug,\n fetch,\n // auth checks if there is a custom authorizaiton header using this flag\n // so it knows whether to return an error when getUser is called with no session\n hasCustomAuthorizationHeader: 'Authorization' in this.headers,\n });\n }\n _initRealtimeClient(options) {\n return new RealtimeClient(this.realtimeUrl, Object.assign(Object.assign({}, options), { params: Object.assign({ apikey: this.supabaseKey }, options === null || options === void 0 ? void 0 : options.params) }));\n }\n _listenForAuthEvents() {\n let data = this.auth.onAuthStateChange((event, session) => {\n this._handleTokenChanged(event, 'CLIENT', session === null || session === void 0 ? void 0 : session.access_token);\n });\n return data;\n }\n _handleTokenChanged(event, source, token) {\n if ((event === 'TOKEN_REFRESHED' || event === 'SIGNED_IN') &&\n this.changedAccessToken !== token) {\n this.changedAccessToken = token;\n }\n else if (event === 'SIGNED_OUT') {\n this.realtime.setAuth();\n if (source == 'STORAGE')\n this.auth.signOut();\n this.changedAccessToken = undefined;\n }\n }\n}\n//# sourceMappingURL=SupabaseClient.js.map","import SupabaseClient from './SupabaseClient';\nexport * from '@supabase/auth-js';\nexport { PostgrestError, } from '@supabase/postgrest-js';\nexport { FunctionsHttpError, FunctionsFetchError, FunctionsRelayError, FunctionsError, FunctionRegion, } from '@supabase/functions-js';\nexport * from '@supabase/realtime-js';\nexport { default as SupabaseClient } from './SupabaseClient';\n/**\n * Creates a new Supabase Client.\n */\nexport const createClient = (supabaseUrl, supabaseKey, options) => {\n return new SupabaseClient(supabaseUrl, supabaseKey, options);\n};\n//# sourceMappingURL=index.js.map","\nimport { createClient } from '@supabase/supabase-js';\n\nconst supabaseUrl = 'https://auflaqkcpltwwnonffxm.supabase.co';\nconst supabaseKey = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImF1ZmxhcWtjcGx0d3dub25mZnhtIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDI0MzIwMjUsImV4cCI6MjA1ODAwODAyNX0.Clx5XCOtlvhHmJEiAzEgIQFcE6C1eM_4CUUVHBgnp_M';\n\nexport const supabase = createClient(supabaseUrl, supabaseKey, {\n auth: {\n autoRefreshToken: true,\n persistSession: true,\n detectSessionInUrl: true\n }\n});\n\n// Property Service\nexport const propertyService = {\n async getProperties(userId) {\n try {\n const { data, error } = await supabase\n .from('properties')\n .select('*')\n .eq('user_id', userId)\n .order('created_at', { ascending: false });\n\n if (error) throw error;\n return data;\n } catch (error) {\n console.error('Error fetching properties:', error);\n throw error;\n }\n },\n\n async getProperty(id) {\n try {\n const { data, error } = await supabase\n .from('properties')\n .select('*')\n .eq('id', id)\n .single();\n\n if (error) throw error;\n return data;\n } catch (error) {\n console.error('Error fetching property:', error);\n throw error;\n }\n },\n\n async createProperty(propertyData) {\n try {\n const { data, error } = await supabase\n .from('properties')\n .insert([propertyData])\n .select()\n .single();\n\n if (error) throw error;\n return data;\n } catch (error) {\n console.error('Error creating property:', error);\n throw error;\n }\n },\n\n async updateProperty(id, updates) {\n try {\n const { data, error } = await supabase\n .from('properties')\n .update(updates)\n .eq('id', id)\n .select()\n .single();\n\n if (error) throw error;\n return data;\n } catch (error) {\n console.error('Error updating property:', error);\n throw error;\n }\n },\n\n async deleteProperty(id) {\n try {\n const { error } = await supabase\n .from('properties')\n .delete()\n .eq('id', id);\n\n if (error) throw error;\n return true;\n } catch (error) {\n console.error('Error deleting property:', error);\n throw error;\n }\n }\n};\n\n// Analysis Service\nexport const analysisService = {\n async saveAnalysis(analysisData) {\n try {\n const { data, error } = await supabase\n .from('analyses')\n .insert([analysisData])\n .select()\n .single();\n\n if (error) throw error;\n return data;\n } catch (error) {\n console.error('Error saving analysis:', error);\n throw error;\n }\n },\n\n async getAnalyses(userId) {\n try {\n const { data, error } = await supabase\n .from('analyses')\n .select('*')\n .eq('user_id', userId)\n .order('created_at', { ascending: false });\n\n if (error) throw error;\n return data;\n } catch (error) {\n console.error('Error fetching analyses:', error);\n throw error;\n }\n }\n};\n\n// User Service\nexport const userService = {\n async updateProfile(userId, updates) {\n try {\n const { data, error } = await supabase\n .from('profiles')\n .upsert({\n id: userId,\n ...updates,\n updated_at: new Date().toISOString()\n })\n .select()\n .single();\n\n if (error) throw error;\n return data;\n } catch (error) {\n console.error('Error updating profile:', error);\n throw error;\n }\n },\n\n async getProfile(userId) {\n try {\n const { data, error } = await supabase\n .from('profiles')\n .select('*')\n .eq('id', userId)\n .single();\n\n if (error) throw error;\n return data;\n } catch (error) {\n console.error('Error fetching profile:', error);\n throw error;\n }\n }\n};\n\n// Subscription Service\nexport const subscriptionService = {\n async getSubscription(userId) {\n try {\n const { data, error } = await supabase\n .from('subscriptions')\n .select('*')\n .eq('user_id', userId)\n .single();\n\n if (error) throw error;\n return data;\n } catch (error) {\n console.error('Error fetching subscription:', error);\n throw error;\n }\n },\n\n async updateSubscription(userId, updates) {\n try {\n const { data, error } = await supabase\n .from('subscriptions')\n .upsert({\n user_id: userId,\n ...updates,\n updated_at: new Date().toISOString()\n })\n .select()\n .single();\n\n if (error) throw error;\n return data;\n } catch (error) {\n console.error('Error updating subscription:', error);\n throw error;\n }\n }\n};\n\n// Real-time subscriptions\nexport const setupRealtimeSubscriptions = (userId, callbacks) => {\n const subscriptions = [\n supabase\n .channel('properties')\n .on('postgres_changes', {\n event: '*',\n schema: 'public',\n table: 'properties',\n filter: `user_id=eq.${userId}`\n }, callbacks.onPropertyChange)\n .subscribe(),\n\n supabase\n .channel('analyses')\n .on('postgres_changes', {\n event: '*',\n schema: 'public',\n table: 'analyses',\n filter: `user_id=eq.${userId}`\n }, callbacks.onAnalysisChange)\n .subscribe(),\n\n supabase\n .channel('profiles')\n .on('postgres_changes', {\n event: '*',\n schema: 'public',\n table: 'profiles',\n filter: `id=eq.${userId}`\n }, callbacks.onProfileChange)\n .subscribe()\n ];\n\n return () => {\n subscriptions.forEach(subscription => subscription.unsubscribe());\n };\n};\n\n// Backup Service\nexport const backupService = {\n async createBackup() {\n try {\n const timestamp = new Date().toISOString();\n const { data, error } = await supabase.rpc('create_backup', { timestamp });\n\n if (error) throw error;\n return data;\n } catch (error) {\n console.error('Error creating backup:', error);\n throw error;\n }\n },\n\n async restoreBackup(backupId) {\n try {\n const { data, error } = await supabase.rpc('restore_backup', { backup_id: backupId });\n\n if (error) throw error;\n return data;\n } catch (error) {\n console.error('Error restoring backup:', error);\n throw error;\n }\n }\n};\n","\nimport { useState, useEffect } from \"react\";\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 1000000;\n\nconst actionTypes = {\n ADD_TOAST: \"ADD_TOAST\",\n UPDATE_TOAST: \"UPDATE_TOAST\",\n DISMISS_TOAST: \"DISMISS_TOAST\",\n REMOVE_TOAST: \"REMOVE_TOAST\",\n};\n\nlet count = 0;\n\nfunction generateId() {\n count = (count + 1) % Number.MAX_VALUE;\n return count.toString();\n}\n\nexport function useToast() {\n const [state, setState] = useState({\n toasts: [],\n });\n\n useEffect(() => {\n const timeouts = [];\n\n state.toasts.forEach((toast) => {\n if (toast.duration === Infinity) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toast.dismiss();\n }, toast.duration || 5000);\n\n timeouts.push(timeout);\n });\n\n return () => {\n timeouts.forEach((timeout) => clearTimeout(timeout));\n };\n }, [state.toasts]);\n\n function toast({ ...props }) {\n const id = generateId();\n\n const update = (props) =>\n setState((state) => ({\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === id ? { ...t, ...props } : t\n ),\n }));\n\n const dismiss = () => setState((state) => ({\n ...state,\n toasts: state.toasts.filter((t) => t.id !== id),\n }));\n\n setState((state) => ({\n ...state,\n toasts: [\n { ...props, id, dismiss },\n ...state.toasts,\n ].slice(0, TOAST_LIMIT),\n }));\n\n return {\n id,\n dismiss,\n update,\n };\n }\n\n return {\n toast,\n toasts: state.toasts,\n };\n}\n","\nimport React, { createContext, useContext, useState, useEffect } from 'react';\nimport { supabase } from '@/lib/supabase';\nimport { useToast } from \"@/components/ui/use-toast\";\n\nconst AuthContext = createContext();\n\nexport function useAuth() {\n const context = useContext(AuthContext);\n if (!context) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n return context;\n}\n\nexport function AuthProvider({ children }) {\n const [user, setUser] = useState(null);\n const [loading, setLoading] = useState(true);\n const { toast } = useToast();\n\n useEffect(() => {\n // Check active sessions and sets the user\n const session = supabase.auth.getSession();\n setUser(session?.user ?? null);\n setLoading(false);\n\n // Listen for changes on auth state (signed in, signed out, etc.)\n const { data: { subscription } } = supabase.auth.onAuthStateChange((_event, session) => {\n setUser(session?.user ?? null);\n setLoading(false);\n });\n\n return () => subscription.unsubscribe();\n }, []);\n\n const signUp = async ({ email, password, firstName, lastName }) => {\n try {\n const { data, error } = await supabase.auth.signUp({\n email,\n password,\n options: {\n data: {\n first_name: firstName,\n last_name: lastName,\n },\n },\n });\n\n if (error) throw error;\n\n return data;\n } catch (error) {\n console.error('Error signing up:', error);\n throw error;\n }\n };\n\n const signIn = async ({ email, password }) => {\n try {\n const { data, error } = await supabase.auth.signInWithPassword({\n email,\n password,\n });\n\n if (error) throw error;\n\n return data;\n } catch (error) {\n console.error('Error signing in:', error);\n throw error;\n }\n };\n\n const signInWithGoogle = async () => {\n try {\n console.log('Starting Google sign in...');\n const { data, error } = await supabase.auth.signInWithOAuth({\n provider: 'google',\n options: {\n queryParams: {\n access_type: 'offline',\n prompt: 'select_account'\n },\n redirectTo: `${window.location.origin}/auth/callback`\n }\n });\n\n if (error) throw error;\n\n console.log('Google sign in successful:', data);\n return data;\n } catch (error) {\n console.error('Google sign in error:', error);\n throw error;\n }\n };\n\n const signOut = async () => {\n try {\n const { error } = await supabase.auth.signOut();\n if (error) throw error;\n\n toast({\n title: \"Signed out\",\n description: \"You have been successfully signed out.\",\n });\n } catch (error) {\n console.error('Error signing out:', error);\n throw error;\n }\n };\n\n const resetPassword = async (email) => {\n try {\n const { error } = await supabase.auth.resetPasswordForEmail(email, {\n redirectTo: `${window.location.origin}/reset-password`,\n });\n\n if (error) throw error;\n\n toast({\n title: \"Password Reset Email Sent\",\n description: \"Check your email for the password reset link.\",\n });\n } catch (error) {\n console.error('Error resetting password:', error);\n throw error;\n }\n };\n\n const updatePassword = async (newPassword) => {\n try {\n const { error } = await supabase.auth.updateUser({\n password: newPassword,\n });\n\n if (error) throw error;\n\n toast({\n title: \"Password Updated\",\n description: \"Your password has been successfully updated.\",\n });\n } catch (error) {\n console.error('Error updating password:', error);\n throw error;\n }\n };\n\n const value = {\n user,\n loading,\n signUp,\n signIn,\n signInWithGoogle,\n signOut,\n resetPassword,\n updatePassword,\n };\n\n return (\n \n {!loading && children}\n \n );\n}\n","\nimport React, { createContext, useContext, useState, useEffect } from \"react\";\nimport { supabase } from \"@/lib/supabase\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { useAuth } from \"./AuthContext\";\n\nconst PropertyContext = createContext();\n\nexport function useProperty() {\n const context = useContext(PropertyContext);\n if (!context) {\n throw new Error(\"useProperty must be used within a PropertyProvider\");\n }\n return context;\n}\n\nexport function PropertyProvider({ children }) {\n const [properties, setProperties] = useState([]);\n const [analyses, setAnalyses] = useState([]);\n const [loading, setLoading] = useState(true);\n const { user } = useAuth();\n const { toast } = useToast();\n\n useEffect(() => {\n if (user) {\n fetchProperties();\n fetchAnalyses();\n }\n }, [user]);\n\n async function fetchProperties() {\n try {\n const { data, error } = await supabase\n .from('properties')\n .select('*')\n .eq('user_id', user.id)\n .order('created_at', { ascending: false });\n\n if (error) throw error;\n\n setProperties(data || []);\n } catch (error) {\n console.error('Error fetching properties:', error);\n toast({\n title: \"Error\",\n description: \"Failed to fetch properties\",\n variant: \"destructive\",\n });\n } finally {\n setLoading(false);\n }\n }\n\n async function fetchAnalyses() {\n try {\n const { data, error } = await supabase\n .from('analyses')\n .select('*')\n .eq('user_id', user.id)\n .order('created_at', { ascending: false });\n\n if (error) throw error;\n\n setAnalyses(data || []);\n } catch (error) {\n console.error('Error fetching analyses:', error);\n toast({\n title: \"Error\",\n description: \"Failed to fetch analyses\",\n variant: \"destructive\",\n });\n }\n }\n\n async function addProperty(propertyData) {\n try {\n const { data, error } = await supabase\n .from('properties')\n .insert([{ ...propertyData, user_id: user.id }])\n .select()\n .single();\n\n if (error) throw error;\n\n setProperties(prev => [data, ...prev]);\n\n toast({\n title: \"Success\",\n description: \"Property added successfully\",\n });\n\n return data;\n } catch (error) {\n console.error('Error adding property:', error);\n toast({\n title: \"Error\",\n description: error.message,\n variant: \"destructive\",\n });\n throw error;\n }\n }\n\n async function updateProperty(id, updates) {\n try {\n const { data, error } = await supabase\n .from('properties')\n .update(updates)\n .eq('id', id)\n .select()\n .single();\n\n if (error) throw error;\n\n setProperties(prev =>\n prev.map(p => (p.id === id ? data : p))\n );\n\n toast({\n title: \"Success\",\n description: \"Property updated successfully\",\n });\n\n return data;\n } catch (error) {\n console.error('Error updating property:', error);\n toast({\n title: \"Error\",\n description: error.message,\n variant: \"destructive\",\n });\n throw error;\n }\n }\n\n async function deleteProperty(id) {\n try {\n const { error } = await supabase\n .from('properties')\n .delete()\n .eq('id', id);\n\n if (error) throw error;\n\n setProperties(prev =>\n prev.filter(p => p.id !== id)\n );\n\n toast({\n title: \"Success\",\n description: \"Property deleted successfully\",\n });\n } catch (error) {\n console.error('Error deleting property:', error);\n toast({\n title: \"Error\",\n description: error.message,\n variant: \"destructive\",\n });\n throw error;\n }\n }\n\n async function saveAnalysis(analysisData) {\n try {\n const { data, error } = await supabase\n .from('analyses')\n .insert([{ ...analysisData, user_id: user.id }])\n .select()\n .single();\n\n if (error) throw error;\n\n setAnalyses(prev => [data, ...prev]);\n\n toast({\n title: \"Success\",\n description: \"Analysis saved successfully\",\n });\n\n return data;\n } catch (error) {\n console.error('Error saving analysis:', error);\n toast({\n title: \"Error\",\n description: error.message,\n variant: \"destructive\",\n });\n throw error;\n }\n }\n\n const value = {\n properties,\n analyses,\n loading,\n addProperty,\n updateProperty,\n deleteProperty,\n saveAnalysis,\n };\n\n return (\n \n {children}\n \n );\n}\n","\nimport React, { createContext, useContext, useState } from 'react';\n\nconst CommunityContext = createContext();\n\nexport function CommunityProvider({ children }) {\n const [discussions, setDiscussions] = useState([]);\n const [messages, setMessages] = useState([]);\n const [notifications, setNotifications] = useState([]);\n\n const value = {\n discussions,\n setDiscussions,\n messages,\n setMessages,\n notifications,\n setNotifications,\n };\n\n return (\n \n {children}\n \n );\n}\n\nexport function useCommunity() {\n const context = useContext(CommunityContext);\n if (!context) {\n throw new Error('useCommunity must be used within a CommunityProvider');\n }\n return context;\n}\n","\nimport React, { createContext, useContext, useState, useEffect } from 'react';\nimport { supabase } from '@/lib/supabase';\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { useAuth } from './AuthContext';\n\nconst UserContext = createContext();\n\nexport function useUser() {\n const context = useContext(UserContext);\n if (!context) {\n throw new Error('useUser must be used within a UserProvider');\n }\n return context;\n}\n\nexport function UserProvider({ children }) {\n const [savedAnalyses, setSavedAnalyses] = useState([]);\n const [favoriteProperties, setFavoriteProperties] = useState([]);\n const [notifications, setNotifications] = useState([]);\n const [preferences, setPreferences] = useState({});\n const { user } = useAuth();\n const { toast } = useToast();\n\n useEffect(() => {\n if (user) {\n fetchUserData();\n }\n }, [user]);\n\n const fetchUserData = async () => {\n try {\n // Fetch saved analyses\n const { data: analyses } = await supabase\n .from('saved_analyses')\n .select('*')\n .eq('user_id', user.id)\n .order('created_at', { ascending: false });\n\n // Fetch favorite properties\n const { data: favorites } = await supabase\n .from('favorite_properties')\n .select('*')\n .eq('user_id', user.id)\n .order('created_at', { ascending: false });\n\n // Fetch notifications\n const { data: notifs } = await supabase\n .from('notifications')\n .select('*')\n .eq('user_id', user.id)\n .order('created_at', { ascending: false });\n\n // Fetch user preferences\n const { data: prefs } = await supabase\n .from('user_preferences')\n .select('*')\n .eq('user_id', user.id)\n .single();\n\n setSavedAnalyses(analyses || []);\n setFavoriteProperties(favorites || []);\n setNotifications(notifs || []);\n setPreferences(prefs || {});\n\n } catch (error) {\n console.error('Error fetching user data:', error);\n toast({\n title: \"Error\",\n description: \"Failed to load user data\",\n variant: \"destructive\",\n });\n }\n };\n\n const saveAnalysis = async (analysis) => {\n try {\n const { data, error } = await supabase\n .from('saved_analyses')\n .insert([{\n user_id: user.id,\n analysis_data: analysis,\n created_at: new Date().toISOString()\n }])\n .select()\n .single();\n\n if (error) throw error;\n\n setSavedAnalyses(prev => [data, ...prev]);\n \n toast({\n title: \"Analysis Saved\",\n description: \"Your analysis has been saved successfully\",\n });\n\n return data;\n } catch (error) {\n console.error('Error saving analysis:', error);\n toast({\n title: \"Error\",\n description: \"Failed to save analysis\",\n variant: \"destructive\",\n });\n throw error;\n }\n };\n\n const toggleFavoriteProperty = async (property) => {\n try {\n const isFavorite = favoriteProperties.some(p => p.property_id === property.id);\n\n if (isFavorite) {\n // Remove from favorites\n await supabase\n .from('favorite_properties')\n .delete()\n .eq('user_id', user.id)\n .eq('property_id', property.id);\n\n setFavoriteProperties(prev => prev.filter(p => p.property_id !== property.id));\n \n toast({\n title: \"Property Removed\",\n description: \"Property removed from favorites\",\n });\n } else {\n // Add to favorites\n const { data, error } = await supabase\n .from('favorite_properties')\n .insert([{\n user_id: user.id,\n property_id: property.id,\n property_data: property,\n created_at: new Date().toISOString()\n }])\n .select()\n .single();\n\n if (error) throw error;\n\n setFavoriteProperties(prev => [data, ...prev]);\n \n toast({\n title: \"Property Saved\",\n description: \"Property added to favorites\",\n });\n }\n } catch (error) {\n console.error('Error toggling favorite:', error);\n toast({\n title: \"Error\",\n description: \"Failed to update favorites\",\n variant: \"destructive\",\n });\n }\n };\n\n const updatePreferences = async (newPreferences) => {\n try {\n const { data, error } = await supabase\n .from('user_preferences')\n .upsert({\n user_id: user.id,\n ...newPreferences,\n updated_at: new Date().toISOString()\n })\n .select()\n .single();\n\n if (error) throw error;\n\n setPreferences(data);\n \n toast({\n title: \"Preferences Updated\",\n description: \"Your preferences have been saved\",\n });\n } catch (error) {\n console.error('Error updating preferences:', error);\n toast({\n title: \"Error\",\n description: \"Failed to update preferences\",\n variant: \"destructive\",\n });\n }\n };\n\n const markNotificationRead = async (notificationId) => {\n try {\n await supabase\n .from('notifications')\n .update({ read: true })\n .eq('id', notificationId);\n\n setNotifications(prev =>\n prev.map(n =>\n n.id === notificationId ? { ...n, read: true } : n\n )\n );\n } catch (error) {\n console.error('Error marking notification read:', error);\n }\n };\n\n const value = {\n savedAnalyses,\n favoriteProperties,\n notifications,\n preferences,\n saveAnalysis,\n toggleFavoriteProperty,\n updatePreferences,\n markNotificationRead,\n };\n\n return (\n \n {children}\n \n );\n}\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t (lukeed.com)\n */\nfunction twJoin() {\n var index = 0;\n var argument;\n var resolvedValue;\n var string = '';\n while (index < arguments.length) {\n if (argument = arguments[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\nfunction toValue(mix) {\n if (typeof mix === 'string') {\n return mix;\n }\n var resolvedValue;\n var string = '';\n for (var k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n}\n\nexport { twJoin };\n//# sourceMappingURL=tw-join.mjs.map\n","var CLASS_PART_SEPARATOR = '-';\nfunction createClassUtils(config) {\n var classMap = createClassMap(config);\n var conflictingClassGroups = config.conflictingClassGroups,\n _config$conflictingCl = config.conflictingClassGroupModifiers,\n conflictingClassGroupModifiers = _config$conflictingCl === void 0 ? {} : _config$conflictingCl;\n function getClassGroupId(className) {\n var classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift();\n }\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className);\n }\n function getConflictingClassGroupIds(classGroupId, hasPostfixModifier) {\n var conflicts = conflictingClassGroups[classGroupId] || [];\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [].concat(conflicts, conflictingClassGroupModifiers[classGroupId]);\n }\n return conflicts;\n }\n return {\n getClassGroupId: getClassGroupId,\n getConflictingClassGroupIds: getConflictingClassGroupIds\n };\n}\nfunction getGroupRecursive(classParts, classPartObject) {\n if (classParts.length === 0) {\n return classPartObject.classGroupId;\n }\n var currentClassPart = classParts[0];\n var nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n var classGroupFromNextClassPart = nextClassPartObject ? getGroupRecursive(classParts.slice(1), nextClassPartObject) : undefined;\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart;\n }\n if (classPartObject.validators.length === 0) {\n return undefined;\n }\n var classRest = classParts.join(CLASS_PART_SEPARATOR);\n return classPartObject.validators.find(function (_ref) {\n var validator = _ref.validator;\n return validator(classRest);\n })?.classGroupId;\n}\nvar arbitraryPropertyRegex = /^\\[(.+)\\]$/;\nfunction getGroupIdForArbitraryProperty(className) {\n if (arbitraryPropertyRegex.test(className)) {\n var arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)[1];\n var property = arbitraryPropertyClassName?.substring(0, arbitraryPropertyClassName.indexOf(':'));\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property;\n }\n }\n}\n/**\n * Exported for testing only\n */\nfunction createClassMap(config) {\n var theme = config.theme,\n prefix = config.prefix;\n var classMap = {\n nextPart: new Map(),\n validators: []\n };\n var prefixedClassGroupEntries = getPrefixedClassGroupEntries(Object.entries(config.classGroups), prefix);\n prefixedClassGroupEntries.forEach(function (_ref2) {\n var classGroupId = _ref2[0],\n classGroup = _ref2[1];\n processClassesRecursively(classGroup, classMap, classGroupId, theme);\n });\n return classMap;\n}\nfunction processClassesRecursively(classGroup, classPartObject, classGroupId, theme) {\n classGroup.forEach(function (classDefinition) {\n if (typeof classDefinition === 'string') {\n var classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n return;\n }\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId: classGroupId\n });\n return;\n }\n Object.entries(classDefinition).forEach(function (_ref3) {\n var key = _ref3[0],\n classGroup = _ref3[1];\n processClassesRecursively(classGroup, getPart(classPartObject, key), classGroupId, theme);\n });\n });\n}\nfunction getPart(classPartObject, path) {\n var currentClassPartObject = classPartObject;\n path.split(CLASS_PART_SEPARATOR).forEach(function (pathPart) {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: []\n });\n }\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart);\n });\n return currentClassPartObject;\n}\nfunction isThemeGetter(func) {\n return func.isThemeGetter;\n}\nfunction getPrefixedClassGroupEntries(classGroupEntries, prefix) {\n if (!prefix) {\n return classGroupEntries;\n }\n return classGroupEntries.map(function (_ref4) {\n var classGroupId = _ref4[0],\n classGroup = _ref4[1];\n var prefixedClassGroup = classGroup.map(function (classDefinition) {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition;\n }\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(Object.entries(classDefinition).map(function (_ref5) {\n var key = _ref5[0],\n value = _ref5[1];\n return [prefix + key, value];\n }));\n }\n return classDefinition;\n });\n return [classGroupId, prefixedClassGroup];\n });\n}\n\nexport { createClassMap, createClassUtils };\n//# sourceMappingURL=class-utils.mjs.map\n","// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nfunction createLruCache(maxCacheSize) {\n if (maxCacheSize < 1) {\n return {\n get: function get() {\n return undefined;\n },\n set: function set() {}\n };\n }\n var cacheSize = 0;\n var cache = new Map();\n var previousCache = new Map();\n function update(key, value) {\n cache.set(key, value);\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = new Map();\n }\n }\n return {\n get: function get(key) {\n var value = cache.get(key);\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set: function set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value);\n } else {\n update(key, value);\n }\n }\n };\n}\n\nexport { createLruCache };\n//# sourceMappingURL=lru-cache.mjs.map\n","var IMPORTANT_MODIFIER = '!';\nfunction createSplitModifiers(config) {\n var separator = config.separator || ':';\n var isSeparatorSingleCharacter = separator.length === 1;\n var firstSeparatorCharacter = separator[0];\n var separatorLength = separator.length;\n // splitModifiers inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n return function splitModifiers(className) {\n var modifiers = [];\n var bracketDepth = 0;\n var modifierStart = 0;\n var postfixModifierPosition;\n for (var index = 0; index < className.length; index++) {\n var currentCharacter = className[index];\n if (bracketDepth === 0) {\n if (currentCharacter === firstSeparatorCharacter && (isSeparatorSingleCharacter || className.slice(index, index + separatorLength) === separator)) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + separatorLength;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') {\n bracketDepth++;\n } else if (currentCharacter === ']') {\n bracketDepth--;\n }\n }\n var baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.substring(modifierStart);\n var hasImportantModifier = baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER);\n var baseClassName = hasImportantModifier ? baseClassNameWithImportantModifier.substring(1) : baseClassNameWithImportantModifier;\n var maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return {\n modifiers: modifiers,\n hasImportantModifier: hasImportantModifier,\n baseClassName: baseClassName,\n maybePostfixModifierPosition: maybePostfixModifierPosition\n };\n };\n}\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nfunction sortModifiers(modifiers) {\n if (modifiers.length <= 1) {\n return modifiers;\n }\n var sortedModifiers = [];\n var unsortedModifiers = [];\n modifiers.forEach(function (modifier) {\n var isArbitraryVariant = modifier[0] === '[';\n if (isArbitraryVariant) {\n sortedModifiers.push.apply(sortedModifiers, unsortedModifiers.sort().concat([modifier]));\n unsortedModifiers = [];\n } else {\n unsortedModifiers.push(modifier);\n }\n });\n sortedModifiers.push.apply(sortedModifiers, unsortedModifiers.sort());\n return sortedModifiers;\n}\n\nexport { IMPORTANT_MODIFIER, createSplitModifiers, sortModifiers };\n//# sourceMappingURL=modifier-utils.mjs.map\n","import { createClassUtils } from './class-utils.mjs';\nimport { createLruCache } from './lru-cache.mjs';\nimport { createSplitModifiers } from './modifier-utils.mjs';\n\nfunction createConfigUtils(config) {\n return {\n cache: createLruCache(config.cacheSize),\n splitModifiers: createSplitModifiers(config),\n ...createClassUtils(config)\n };\n}\n\nexport { createConfigUtils };\n//# sourceMappingURL=config-utils.mjs.map\n","import { sortModifiers, IMPORTANT_MODIFIER } from './modifier-utils.mjs';\n\nvar SPLIT_CLASSES_REGEX = /\\s+/;\nfunction mergeClassList(classList, configUtils) {\n var splitModifiers = configUtils.splitModifiers,\n getClassGroupId = configUtils.getClassGroupId,\n getConflictingClassGroupIds = configUtils.getConflictingClassGroupIds;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n var classGroupsInConflict = new Set();\n return classList.trim().split(SPLIT_CLASSES_REGEX).map(function (originalClassName) {\n var _splitModifiers = splitModifiers(originalClassName),\n modifiers = _splitModifiers.modifiers,\n hasImportantModifier = _splitModifiers.hasImportantModifier,\n baseClassName = _splitModifiers.baseClassName,\n maybePostfixModifierPosition = _splitModifiers.maybePostfixModifierPosition;\n var classGroupId = getClassGroupId(maybePostfixModifierPosition ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n var hasPostfixModifier = Boolean(maybePostfixModifierPosition);\n if (!classGroupId) {\n if (!maybePostfixModifierPosition) {\n return {\n isTailwindClass: false,\n originalClassName: originalClassName\n };\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n return {\n isTailwindClass: false,\n originalClassName: originalClassName\n };\n }\n hasPostfixModifier = false;\n }\n var variantModifier = sortModifiers(modifiers).join(':');\n var modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n return {\n isTailwindClass: true,\n modifierId: modifierId,\n classGroupId: classGroupId,\n originalClassName: originalClassName,\n hasPostfixModifier: hasPostfixModifier\n };\n }).reverse()\n // Last class in conflict wins, so we need to filter conflicting classes in reverse order.\n .filter(function (parsed) {\n if (!parsed.isTailwindClass) {\n return true;\n }\n var modifierId = parsed.modifierId,\n classGroupId = parsed.classGroupId,\n hasPostfixModifier = parsed.hasPostfixModifier;\n var classId = modifierId + classGroupId;\n if (classGroupsInConflict.has(classId)) {\n return false;\n }\n classGroupsInConflict.add(classId);\n getConflictingClassGroupIds(classGroupId, hasPostfixModifier).forEach(function (group) {\n return classGroupsInConflict.add(modifierId + group);\n });\n return true;\n }).reverse().map(function (parsed) {\n return parsed.originalClassName;\n }).join(' ');\n}\n\nexport { mergeClassList };\n//# sourceMappingURL=merge-classlist.mjs.map\n","import { createConfigUtils } from './config-utils.mjs';\nimport { mergeClassList } from './merge-classlist.mjs';\nimport { twJoin } from './tw-join.mjs';\n\nfunction createTailwindMerge() {\n for (var _len = arguments.length, createConfig = new Array(_len), _key = 0; _key < _len; _key++) {\n createConfig[_key] = arguments[_key];\n }\n var configUtils;\n var cacheGet;\n var cacheSet;\n var functionToCall = initTailwindMerge;\n function initTailwindMerge(classList) {\n var firstCreateConfig = createConfig[0],\n restCreateConfig = createConfig.slice(1);\n var config = restCreateConfig.reduce(function (previousConfig, createConfigCurrent) {\n return createConfigCurrent(previousConfig);\n }, firstCreateConfig());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n }\n function tailwindMerge(classList) {\n var cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n var result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n }\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments));\n };\n}\n\nexport { createTailwindMerge };\n//# sourceMappingURL=create-tailwind-merge.mjs.map\n","function fromTheme(key) {\n var themeGetter = function themeGetter(theme) {\n return theme[key] || [];\n };\n themeGetter.isThemeGetter = true;\n return themeGetter;\n}\n\nexport { fromTheme };\n//# sourceMappingURL=from-theme.mjs.map\n","var arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i;\nvar fractionRegex = /^\\d+\\/\\d+$/;\nvar stringLengths = /*#__PURE__*/new Set(['px', 'full', 'screen']);\nvar tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nvar lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\n// Shadow always begins with x and y offset separated by underscore\nvar shadowRegex = /^-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nfunction isLength(value) {\n return isNumber(value) || stringLengths.has(value) || fractionRegex.test(value) || isArbitraryLength(value);\n}\nfunction isArbitraryLength(value) {\n return getIsArbitraryValue(value, 'length', isLengthOnly);\n}\nfunction isArbitrarySize(value) {\n return getIsArbitraryValue(value, 'size', isNever);\n}\nfunction isArbitraryPosition(value) {\n return getIsArbitraryValue(value, 'position', isNever);\n}\nfunction isArbitraryUrl(value) {\n return getIsArbitraryValue(value, 'url', isUrl);\n}\nfunction isArbitraryNumber(value) {\n return getIsArbitraryValue(value, 'number', isNumber);\n}\n/**\n * @deprecated Will be removed in next major version. Use `isArbitraryNumber` instead.\n */\nvar isArbitraryWeight = isArbitraryNumber;\nfunction isNumber(value) {\n return !Number.isNaN(Number(value));\n}\nfunction isPercent(value) {\n return value.endsWith('%') && isNumber(value.slice(0, -1));\n}\nfunction isInteger(value) {\n return isIntegerOnly(value) || getIsArbitraryValue(value, 'number', isIntegerOnly);\n}\nfunction isArbitraryValue(value) {\n return arbitraryValueRegex.test(value);\n}\nfunction isAny() {\n return true;\n}\nfunction isTshirtSize(value) {\n return tshirtUnitRegex.test(value);\n}\nfunction isArbitraryShadow(value) {\n return getIsArbitraryValue(value, '', isShadow);\n}\nfunction getIsArbitraryValue(value, label, testValue) {\n var result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return result[1] === label;\n }\n return testValue(result[2]);\n }\n return false;\n}\nfunction isLengthOnly(value) {\n return lengthUnitRegex.test(value);\n}\nfunction isNever() {\n return false;\n}\nfunction isUrl(value) {\n return value.startsWith('url(');\n}\nfunction isIntegerOnly(value) {\n return Number.isInteger(Number(value));\n}\nfunction isShadow(value) {\n return shadowRegex.test(value);\n}\n\nexport { isAny, isArbitraryLength, isArbitraryNumber, isArbitraryPosition, isArbitraryShadow, isArbitrarySize, isArbitraryUrl, isArbitraryValue, isArbitraryWeight, isInteger, isLength, isNumber, isPercent, isTshirtSize };\n//# sourceMappingURL=validators.mjs.map\n","import { fromTheme } from './from-theme.mjs';\nimport { isAny, isLength, isTshirtSize, isArbitraryValue, isPercent, isArbitraryLength, isInteger, isArbitraryNumber, isNumber, isArbitraryPosition, isArbitrarySize, isArbitraryUrl, isArbitraryShadow } from './validators.mjs';\n\nfunction getDefaultConfig() {\n var colors = fromTheme('colors');\n var spacing = fromTheme('spacing');\n var blur = fromTheme('blur');\n var brightness = fromTheme('brightness');\n var borderColor = fromTheme('borderColor');\n var borderRadius = fromTheme('borderRadius');\n var borderSpacing = fromTheme('borderSpacing');\n var borderWidth = fromTheme('borderWidth');\n var contrast = fromTheme('contrast');\n var grayscale = fromTheme('grayscale');\n var hueRotate = fromTheme('hueRotate');\n var invert = fromTheme('invert');\n var gap = fromTheme('gap');\n var gradientColorStops = fromTheme('gradientColorStops');\n var gradientColorStopPositions = fromTheme('gradientColorStopPositions');\n var inset = fromTheme('inset');\n var margin = fromTheme('margin');\n var opacity = fromTheme('opacity');\n var padding = fromTheme('padding');\n var saturate = fromTheme('saturate');\n var scale = fromTheme('scale');\n var sepia = fromTheme('sepia');\n var skew = fromTheme('skew');\n var space = fromTheme('space');\n var translate = fromTheme('translate');\n var getOverscroll = function getOverscroll() {\n return ['auto', 'contain', 'none'];\n };\n var getOverflow = function getOverflow() {\n return ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n };\n var getSpacingWithAutoAndArbitrary = function getSpacingWithAutoAndArbitrary() {\n return ['auto', isArbitraryValue, spacing];\n };\n var getSpacingWithArbitrary = function getSpacingWithArbitrary() {\n return [isArbitraryValue, spacing];\n };\n var getLengthWithEmpty = function getLengthWithEmpty() {\n return ['', isLength];\n };\n var getNumberWithAutoAndArbitrary = function getNumberWithAutoAndArbitrary() {\n return ['auto', isNumber, isArbitraryValue];\n };\n var getPositions = function getPositions() {\n return ['bottom', 'center', 'left', 'left-bottom', 'left-top', 'right', 'right-bottom', 'right-top', 'top'];\n };\n var getLineStyles = function getLineStyles() {\n return ['solid', 'dashed', 'dotted', 'double', 'none'];\n };\n var getBlendModes = function getBlendModes() {\n return ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity', 'plus-lighter'];\n };\n var getAlign = function getAlign() {\n return ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'];\n };\n var getZeroAndEmpty = function getZeroAndEmpty() {\n return ['', '0', isArbitraryValue];\n };\n var getBreaks = function getBreaks() {\n return ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n };\n var getNumber = function getNumber() {\n return [isNumber, isArbitraryNumber];\n };\n var getNumberAndArbitrary = function getNumberAndArbitrary() {\n return [isNumber, isArbitraryValue];\n };\n return {\n cacheSize: 500,\n theme: {\n colors: [isAny],\n spacing: [isLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumber(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmpty(),\n contrast: getNumber(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumber(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumber(),\n scale: getNumber(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary()\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', 'video', isArbitraryValue]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isTshirtSize]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': getBreaks()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': getBreaks()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n \"float\": [{\n \"float\": ['right', 'left', 'none']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: [].concat(getPositions(), [isArbitraryValue])\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: getOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': getOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': getOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: getOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': getOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': getOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: [inset]\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': [inset]\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': [inset]\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: [inset]\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: [inset]\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: [inset]\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: [inset]\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: [inset]\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: [inset]\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: ['auto', isInteger]\n }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: getSpacingWithAutoAndArbitrary()\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['wrap', 'wrap-reverse', 'nowrap']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: ['1', 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: getZeroAndEmpty()\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: getZeroAndEmpty()\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: ['first', 'last', 'none', isInteger]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': [isAny]\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: ['auto', {\n span: ['full', isInteger]\n }, isArbitraryValue]\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': [isAny]\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: ['auto', {\n span: [isInteger]\n }, isArbitraryValue]\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': getNumberWithAutoAndArbitrary()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue]\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: [gap]\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': [gap]\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': [gap]\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: ['normal'].concat(getAlign())\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': ['start', 'end', 'center', 'stretch']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal'].concat(getAlign(), ['baseline'])\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline']\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': [].concat(getAlign(), ['baseline'])\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': ['start', 'end', 'center', 'baseline', 'stretch']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', 'start', 'end', 'center', 'stretch']\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: [padding]\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: [padding]\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: [padding]\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: [padding]\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: [padding]\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: [padding]\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: [padding]\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: [padding]\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: [padding]\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: [margin]\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: [margin]\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: [margin]\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: [margin]\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: [margin]\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: [margin]\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: [margin]\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: [margin]\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: [margin]\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{\n 'space-x': [space]\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{\n 'space-y': [space]\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: ['auto', 'min', 'max', 'fit', isArbitraryValue, spacing]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': ['min', 'max', 'fit', isArbitraryValue, isLength]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': ['0', 'none', 'full', 'min', 'max', 'fit', 'prose', {\n screen: [isTshirtSize]\n }, isTshirtSize, isArbitraryValue]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit']\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['min', 'max', 'fit', isArbitraryValue, isLength]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit']\n }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', isTshirtSize, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black', isArbitraryNumber]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isAny]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractons'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest', isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': ['none', isNumber, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose', isArbitraryValue, isLength]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryValue]\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['none', 'disc', 'decimal', isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: [colors]\n }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{\n 'placeholder-opacity': [opacity]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: [colors]\n }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{\n 'text-opacity': [opacity]\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [].concat(getLineStyles(), ['wavy'])\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: ['auto', 'from-font', isLength]\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': ['auto', isArbitraryValue, isLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: [colors]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: getSpacingWithArbitrary()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n \"break\": [{\n \"break\": ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryValue]\n }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{\n 'bg-opacity': [opacity]\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: [].concat(getPositions(), [isArbitraryPosition])\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: ['no-repeat', {\n repeat: ['', 'x', 'y', 'round', 'space']\n }]\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: ['auto', 'cover', 'contain', isArbitrarySize]\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isArbitraryUrl]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: [colors]\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: [gradientColorStopPositions]\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: [gradientColorStops]\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: [gradientColorStops]\n }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: [borderRadius]\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': [borderRadius]\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': [borderRadius]\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': [borderRadius]\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': [borderRadius]\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': [borderRadius]\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': [borderRadius]\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': [borderRadius]\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': [borderRadius]\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': [borderRadius]\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': [borderRadius]\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': [borderRadius]\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': [borderRadius]\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': [borderRadius]\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': [borderRadius]\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: [borderWidth]\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': [borderWidth]\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': [borderWidth]\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': [borderWidth]\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': [borderWidth]\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': [borderWidth]\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': [borderWidth]\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': [borderWidth]\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': [borderWidth]\n }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{\n 'border-opacity': [opacity]\n }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [].concat(getLineStyles(), ['hidden'])\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{\n 'divide-x': [borderWidth]\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{\n 'divide-y': [borderWidth]\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{\n 'divide-opacity': [opacity]\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{\n divide: getLineStyles()\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: [borderColor]\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': [borderColor]\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': [borderColor]\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': [borderColor]\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': [borderColor]\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': [borderColor]\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': [borderColor]\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: [borderColor]\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [''].concat(getLineStyles())\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isArbitraryValue, isLength]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: [isLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: [colors]\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{\n ring: getLengthWithEmpty()\n }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{\n ring: [colors]\n }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{\n 'ring-opacity': [opacity]\n }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{\n 'ring-offset': [isLength]\n }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{\n 'ring-offset': [colors]\n }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{\n shadow: [isAny]\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [opacity]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': getBlendModes()\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': getBlendModes()\n }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: ['', 'none']\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: [blur]\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [brightness]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [contrast]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue]\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: [grayscale]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [hueRotate]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: [invert]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [saturate]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: [sepia]\n }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': ['', 'none']\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': [blur]\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [brightness]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [contrast]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': [grayscale]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [hueRotate]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': [invert]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [opacity]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [saturate]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': [sepia]\n }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': [borderSpacing]\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': [borderSpacing]\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': [borderSpacing]\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['none', 'all', '', 'colors', 'opacity', 'shadow', 'transform', isArbitraryValue]\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: getNumberAndArbitrary()\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: getNumberAndArbitrary()\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue]\n }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: ['', 'gpu', 'none']\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: [scale]\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': [scale]\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': [scale]\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: [isInteger, isArbitraryValue]\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': [translate]\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': [translate]\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': [skew]\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': [skew]\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: ['center', 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', isArbitraryValue]\n }],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: ['auto', colors]\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: ['appearance-none'],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryValue]\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: [colors]\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['none', 'auto']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', 'y', 'x', '']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': getSpacingWithArbitrary()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'pinch-zoom', 'manipulation', {\n pan: ['x', 'left', 'right', 'y', 'up', 'down']\n }]\n }],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue]\n }],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: [colors, 'none']\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: [colors, 'none']\n }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only']\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n }\n };\n}\n\nexport { getDefaultConfig };\n//# sourceMappingURL=default-config.mjs.map\n","import { createTailwindMerge } from './create-tailwind-merge.mjs';\nimport { getDefaultConfig } from './default-config.mjs';\n\nvar twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\n\nexport { twMerge };\n//# sourceMappingURL=tw-merge.mjs.map\n","\nimport { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs) {\n return twMerge(clsx(inputs));\n}\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ color = \"currentColor\", size = 24, strokeWidth = 2, absoluteStrokeWidth, children, ...rest }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: `lucide lucide-${toKebabCase(iconName)}`,\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...(Array.isArray(children) ? children : [children]) || []\n ]\n )\n );\n Component.displayName = `${iconName}`;\n return Component;\n};\n\nexport { createLucideIcon as default, toKebabCase };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst AlertTriangle = createLucideIcon(\"AlertTriangle\", [\n [\n \"path\",\n {\n d: \"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3Z\",\n key: \"c3ski4\"\n }\n ],\n [\"path\", { d: \"M12 9v4\", key: \"juzpu7\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n]);\n\nexport { AlertTriangle as default };\n//# sourceMappingURL=alert-triangle.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ArrowLeftRight = createLucideIcon(\"ArrowLeftRight\", [\n [\"path\", { d: \"M8 3 4 7l4 4\", key: \"9rb6wj\" }],\n [\"path\", { d: \"M4 7h16\", key: \"6tx8e3\" }],\n [\"path\", { d: \"m16 21 4-4-4-4\", key: \"siv7j2\" }],\n [\"path\", { d: \"M20 17H4\", key: \"h6l3hr\" }]\n]);\n\nexport { ArrowLeftRight as default };\n//# sourceMappingURL=arrow-left-right.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ArrowLeft = createLucideIcon(\"ArrowLeft\", [\n [\"path\", { d: \"m12 19-7-7 7-7\", key: \"1l729n\" }],\n [\"path\", { d: \"M19 12H5\", key: \"x3x0zl\" }]\n]);\n\nexport { ArrowLeft as default };\n//# sourceMappingURL=arrow-left.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ArrowRight = createLucideIcon(\"ArrowRight\", [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"m12 5 7 7-7 7\", key: \"xquz4c\" }]\n]);\n\nexport { ArrowRight as default };\n//# sourceMappingURL=arrow-right.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst BarChart3 = createLucideIcon(\"BarChart3\", [\n [\"path\", { d: \"M3 3v18h18\", key: \"1s2lah\" }],\n [\"path\", { d: \"M18 17V9\", key: \"2bz60n\" }],\n [\"path\", { d: \"M13 17V5\", key: \"1frdt8\" }],\n [\"path\", { d: \"M8 17v-3\", key: \"17ska0\" }]\n]);\n\nexport { BarChart3 as default };\n//# sourceMappingURL=bar-chart-3.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Bell = createLucideIcon(\"Bell\", [\n [\"path\", { d: \"M6 8a6 6 0 0 1 12 0c0 7 3 9 3 9H3s3-2 3-9\", key: \"1qo2s2\" }],\n [\"path\", { d: \"M10.3 21a1.94 1.94 0 0 0 3.4 0\", key: \"qgo35s\" }]\n]);\n\nexport { Bell as default };\n//# sourceMappingURL=bell.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Brain = createLucideIcon(\"Brain\", [\n [\n \"path\",\n {\n d: \"M9.5 2A2.5 2.5 0 0 1 12 4.5v15a2.5 2.5 0 0 1-4.96.44 2.5 2.5 0 0 1-2.96-3.08 3 3 0 0 1-.34-5.58 2.5 2.5 0 0 1 1.32-4.24 2.5 2.5 0 0 1 1.98-3A2.5 2.5 0 0 1 9.5 2Z\",\n key: \"1mhkh5\"\n }\n ],\n [\n \"path\",\n {\n d: \"M14.5 2A2.5 2.5 0 0 0 12 4.5v15a2.5 2.5 0 0 0 4.96.44 2.5 2.5 0 0 0 2.96-3.08 3 3 0 0 0 .34-5.58 2.5 2.5 0 0 0-1.32-4.24 2.5 2.5 0 0 0-1.98-3A2.5 2.5 0 0 0 14.5 2Z\",\n key: \"1d6s00\"\n }\n ]\n]);\n\nexport { Brain as default };\n//# sourceMappingURL=brain.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Building = createLucideIcon(\"Building\", [\n [\n \"rect\",\n {\n width: \"16\",\n height: \"20\",\n x: \"4\",\n y: \"2\",\n rx: \"2\",\n ry: \"2\",\n key: \"76otgf\"\n }\n ],\n [\"path\", { d: \"M9 22v-4h6v4\", key: \"r93iot\" }],\n [\"path\", { d: \"M8 6h.01\", key: \"1dz90k\" }],\n [\"path\", { d: \"M16 6h.01\", key: \"1x0f13\" }],\n [\"path\", { d: \"M12 6h.01\", key: \"1vi96p\" }],\n [\"path\", { d: \"M12 10h.01\", key: \"1nrarc\" }],\n [\"path\", { d: \"M12 14h.01\", key: \"1etili\" }],\n [\"path\", { d: \"M16 10h.01\", key: \"1m94wz\" }],\n [\"path\", { d: \"M16 14h.01\", key: \"1gbofw\" }],\n [\"path\", { d: \"M8 10h.01\", key: \"19clt8\" }],\n [\"path\", { d: \"M8 14h.01\", key: \"6423bh\" }]\n]);\n\nexport { Building as default };\n//# sourceMappingURL=building.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Calendar = createLucideIcon(\"Calendar\", [\n [\n \"rect\",\n {\n width: \"18\",\n height: \"18\",\n x: \"3\",\n y: \"4\",\n rx: \"2\",\n ry: \"2\",\n key: \"eu3xkr\"\n }\n ],\n [\"line\", { x1: \"16\", x2: \"16\", y1: \"2\", y2: \"6\", key: \"m3sa8f\" }],\n [\"line\", { x1: \"8\", x2: \"8\", y1: \"2\", y2: \"6\", key: \"18kwsl\" }],\n [\"line\", { x1: \"3\", x2: \"21\", y1: \"10\", y2: \"10\", key: \"xt86sb\" }]\n]);\n\nexport { Calendar as default };\n//# sourceMappingURL=calendar.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CheckCircle = createLucideIcon(\"CheckCircle\", [\n [\"path\", { d: \"M22 11.08V12a10 10 0 1 1-5.93-9.14\", key: \"g774vq\" }],\n [\"polyline\", { points: \"22 4 12 14.01 9 11.01\", key: \"6xbx8j\" }]\n]);\n\nexport { CheckCircle as default };\n//# sourceMappingURL=check-circle.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Check = createLucideIcon(\"Check\", [\n [\"polyline\", { points: \"20 6 9 17 4 12\", key: \"10jjfj\" }]\n]);\n\nexport { Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst ChevronDown = createLucideIcon(\"ChevronDown\", [\n [\"path\", { d: \"m6 9 6 6 6-6\", key: \"qrunsl\" }]\n]);\n\nexport { ChevronDown as default };\n//# sourceMappingURL=chevron-down.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Chrome = createLucideIcon(\"Chrome\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"4\", key: \"4exip2\" }],\n [\"line\", { x1: \"21.17\", x2: \"12\", y1: \"8\", y2: \"8\", key: \"a0cw5f\" }],\n [\"line\", { x1: \"3.95\", x2: \"8.54\", y1: \"6.06\", y2: \"14\", key: \"1kftof\" }],\n [\"line\", { x1: \"10.88\", x2: \"15.46\", y1: \"21.94\", y2: \"14\", key: \"1ymyh8\" }]\n]);\n\nexport { Chrome as default };\n//# sourceMappingURL=chrome.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst CreditCard = createLucideIcon(\"CreditCard\", [\n [\n \"rect\",\n { width: \"20\", height: \"14\", x: \"2\", y: \"5\", rx: \"2\", key: \"ynyp8z\" }\n ],\n [\"line\", { x1: \"2\", x2: \"22\", y1: \"10\", y2: \"10\", key: \"1b3vmo\" }]\n]);\n\nexport { CreditCard as default };\n//# sourceMappingURL=credit-card.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst DollarSign = createLucideIcon(\"DollarSign\", [\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"2\", y2: \"22\", key: \"7eqyqh\" }],\n [\n \"path\",\n { d: \"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\", key: \"1b0p4s\" }\n ]\n]);\n\nexport { DollarSign as default };\n//# sourceMappingURL=dollar-sign.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Download = createLucideIcon(\"Download\", [\n [\"path\", { d: \"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\", key: \"ih7n3h\" }],\n [\"polyline\", { points: \"7 10 12 15 17 10\", key: \"2ggqvy\" }],\n [\"line\", { x1: \"12\", x2: \"12\", y1: \"15\", y2: \"3\", key: \"1vk2je\" }]\n]);\n\nexport { Download as default };\n//# sourceMappingURL=download.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Gift = createLucideIcon(\"Gift\", [\n [\"rect\", { x: \"3\", y: \"8\", width: \"18\", height: \"4\", rx: \"1\", key: \"bkv52\" }],\n [\"path\", { d: \"M12 8v13\", key: \"1c76mn\" }],\n [\"path\", { d: \"M19 12v7a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2v-7\", key: \"6wjy6b\" }],\n [\n \"path\",\n {\n d: \"M7.5 8a2.5 2.5 0 0 1 0-5A4.8 8 0 0 1 12 8a4.8 8 0 0 1 4.5-5 2.5 2.5 0 0 1 0 5\",\n key: \"1ihvrl\"\n }\n ]\n]);\n\nexport { Gift as default };\n//# sourceMappingURL=gift.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst HelpCircle = createLucideIcon(\"HelpCircle\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\", key: \"1u773s\" }],\n [\"path\", { d: \"M12 17h.01\", key: \"p32p05\" }]\n]);\n\nexport { HelpCircle as default };\n//# sourceMappingURL=help-circle.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Home = createLucideIcon(\"Home\", [\n [\n \"path\",\n { d: \"m3 9 9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\", key: \"y5dka4\" }\n ],\n [\"polyline\", { points: \"9 22 9 12 15 12 15 22\", key: \"e2us08\" }]\n]);\n\nexport { Home as default };\n//# sourceMappingURL=home.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Image = createLucideIcon(\"Image\", [\n [\n \"rect\",\n {\n width: \"18\",\n height: \"18\",\n x: \"3\",\n y: \"3\",\n rx: \"2\",\n ry: \"2\",\n key: \"1m3agn\"\n }\n ],\n [\"circle\", { cx: \"9\", cy: \"9\", r: \"2\", key: \"af1f0g\" }],\n [\"path\", { d: \"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21\", key: \"1xmnt7\" }]\n]);\n\nexport { Image as default };\n//# sourceMappingURL=image.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Loader2 = createLucideIcon(\"Loader2\", [\n [\"path\", { d: \"M21 12a9 9 0 1 1-6.219-8.56\", key: \"13zald\" }]\n]);\n\nexport { Loader2 as default };\n//# sourceMappingURL=loader-2.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Lock = createLucideIcon(\"Lock\", [\n [\n \"rect\",\n {\n width: \"18\",\n height: \"11\",\n x: \"3\",\n y: \"11\",\n rx: \"2\",\n ry: \"2\",\n key: \"1w4ew1\"\n }\n ],\n [\"path\", { d: \"M7 11V7a5 5 0 0 1 10 0v4\", key: \"fwvmzm\" }]\n]);\n\nexport { Lock as default };\n//# sourceMappingURL=lock.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst LogOut = createLucideIcon(\"LogOut\", [\n [\"path\", { d: \"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\", key: \"1uf3rs\" }],\n [\"polyline\", { points: \"16 17 21 12 16 7\", key: \"1gabdz\" }],\n [\"line\", { x1: \"21\", x2: \"9\", y1: \"12\", y2: \"12\", key: \"1uyos4\" }]\n]);\n\nexport { LogOut as default };\n//# sourceMappingURL=log-out.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Mail = createLucideIcon(\"Mail\", [\n [\n \"rect\",\n { width: \"20\", height: \"16\", x: \"2\", y: \"4\", rx: \"2\", key: \"18n3k1\" }\n ],\n [\"path\", { d: \"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\", key: \"1ocrg3\" }]\n]);\n\nexport { Mail as default };\n//# sourceMappingURL=mail.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Map = createLucideIcon(\"Map\", [\n [\n \"polygon\",\n { points: \"3 6 9 3 15 6 21 3 21 18 15 21 9 18 3 21\", key: \"ok2ie8\" }\n ],\n [\"line\", { x1: \"9\", x2: \"9\", y1: \"3\", y2: \"18\", key: \"w34qz5\" }],\n [\"line\", { x1: \"15\", x2: \"15\", y1: \"6\", y2: \"21\", key: \"volv9a\" }]\n]);\n\nexport { Map as default };\n//# sourceMappingURL=map.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MessageSquare = createLucideIcon(\"MessageSquare\", [\n [\n \"path\",\n {\n d: \"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\",\n key: \"1lielz\"\n }\n ]\n]);\n\nexport { MessageSquare as default };\n//# sourceMappingURL=message-square.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst MoreHorizontal = createLucideIcon(\"MoreHorizontal\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"1\", key: \"41hilf\" }],\n [\"circle\", { cx: \"19\", cy: \"12\", r: \"1\", key: \"1wjl8i\" }],\n [\"circle\", { cx: \"5\", cy: \"12\", r: \"1\", key: \"1pcz8c\" }]\n]);\n\nexport { MoreHorizontal as default };\n//# sourceMappingURL=more-horizontal.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Paperclip = createLucideIcon(\"Paperclip\", [\n [\n \"path\",\n {\n d: \"m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48\",\n key: \"1u3ebp\"\n }\n ]\n]);\n\nexport { Paperclip as default };\n//# sourceMappingURL=paperclip.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Percent = createLucideIcon(\"Percent\", [\n [\"line\", { x1: \"19\", x2: \"5\", y1: \"5\", y2: \"19\", key: \"1x9vlm\" }],\n [\"circle\", { cx: \"6.5\", cy: \"6.5\", r: \"2.5\", key: \"4mh3h7\" }],\n [\"circle\", { cx: \"17.5\", cy: \"17.5\", r: \"2.5\", key: \"1mdrzq\" }]\n]);\n\nexport { Percent as default };\n//# sourceMappingURL=percent.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Phone = createLucideIcon(\"Phone\", [\n [\n \"path\",\n {\n d: \"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\",\n key: \"foiqr5\"\n }\n ]\n]);\n\nexport { Phone as default };\n//# sourceMappingURL=phone.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst PieChart = createLucideIcon(\"PieChart\", [\n [\"path\", { d: \"M21.21 15.89A10 10 0 1 1 8 2.83\", key: \"k2fpak\" }],\n [\"path\", { d: \"M22 12A10 10 0 0 0 12 2v10z\", key: \"1rfc4y\" }]\n]);\n\nexport { PieChart as default };\n//# sourceMappingURL=pie-chart.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Plus = createLucideIcon(\"Plus\", [\n [\"path\", { d: \"M5 12h14\", key: \"1ays0h\" }],\n [\"path\", { d: \"M12 5v14\", key: \"s699le\" }]\n]);\n\nexport { Plus as default };\n//# sourceMappingURL=plus.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst RefreshCw = createLucideIcon(\"RefreshCw\", [\n [\n \"path\",\n { d: \"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\", key: \"v9h5vc\" }\n ],\n [\"path\", { d: \"M21 3v5h-5\", key: \"1q7to0\" }],\n [\n \"path\",\n { d: \"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\", key: \"3uifl3\" }\n ],\n [\"path\", { d: \"M8 16H3v5\", key: \"1cv678\" }]\n]);\n\nexport { RefreshCw as default };\n//# sourceMappingURL=refresh-cw.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Search = createLucideIcon(\"Search\", [\n [\"circle\", { cx: \"11\", cy: \"11\", r: \"8\", key: \"4ej97u\" }],\n [\"path\", { d: \"m21 21-4.3-4.3\", key: \"1qie3q\" }]\n]);\n\nexport { Search as default };\n//# sourceMappingURL=search.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Send = createLucideIcon(\"Send\", [\n [\"path\", { d: \"m22 2-7 20-4-9-9-4Z\", key: \"1q3vgg\" }],\n [\"path\", { d: \"M22 2 11 13\", key: \"nzbqef\" }]\n]);\n\nexport { Send as default };\n//# sourceMappingURL=send.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Settings = createLucideIcon(\"Settings\", [\n [\n \"path\",\n {\n d: \"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z\",\n key: \"1qme2f\"\n }\n ],\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"3\", key: \"1v7zrd\" }]\n]);\n\nexport { Settings as default };\n//# sourceMappingURL=settings.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Share2 = createLucideIcon(\"Share2\", [\n [\"circle\", { cx: \"18\", cy: \"5\", r: \"3\", key: \"gq8acd\" }],\n [\"circle\", { cx: \"6\", cy: \"12\", r: \"3\", key: \"w7nqdw\" }],\n [\"circle\", { cx: \"18\", cy: \"19\", r: \"3\", key: \"1xt0gg\" }],\n [\n \"line\",\n { x1: \"8.59\", x2: \"15.42\", y1: \"13.51\", y2: \"17.49\", key: \"47mynk\" }\n ],\n [\"line\", { x1: \"15.41\", x2: \"8.59\", y1: \"6.51\", y2: \"10.49\", key: \"1n3mei\" }]\n]);\n\nexport { Share2 as default };\n//# sourceMappingURL=share-2.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Shield = createLucideIcon(\"Shield\", [\n [\"path\", { d: \"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10\", key: \"1irkt0\" }]\n]);\n\nexport { Shield as default };\n//# sourceMappingURL=shield.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Smile = createLucideIcon(\"Smile\", [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"M8 14s1.5 2 4 2 4-2 4-2\", key: \"1y1vjs\" }],\n [\"line\", { x1: \"9\", x2: \"9.01\", y1: \"9\", y2: \"9\", key: \"yxxnd0\" }],\n [\"line\", { x1: \"15\", x2: \"15.01\", y1: \"9\", y2: \"9\", key: \"1p4y9e\" }]\n]);\n\nexport { Smile as default };\n//# sourceMappingURL=smile.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Star = createLucideIcon(\"Star\", [\n [\n \"polygon\",\n {\n points: \"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\",\n key: \"8f66p6\"\n }\n ]\n]);\n\nexport { Star as default };\n//# sourceMappingURL=star.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Trash2 = createLucideIcon(\"Trash2\", [\n [\"path\", { d: \"M3 6h18\", key: \"d0wm0j\" }],\n [\"path\", { d: \"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\", key: \"4alrt4\" }],\n [\"path\", { d: \"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\", key: \"v07s0e\" }],\n [\"line\", { x1: \"10\", x2: \"10\", y1: \"11\", y2: \"17\", key: \"1uufr5\" }],\n [\"line\", { x1: \"14\", x2: \"14\", y1: \"11\", y2: \"17\", key: \"xtxkd\" }]\n]);\n\nexport { Trash2 as default };\n//# sourceMappingURL=trash-2.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst TrendingUp = createLucideIcon(\"TrendingUp\", [\n [\"polyline\", { points: \"22 7 13.5 15.5 8.5 10.5 2 17\", key: \"126l90\" }],\n [\"polyline\", { points: \"16 7 22 7 22 13\", key: \"kwv8wd\" }]\n]);\n\nexport { TrendingUp as default };\n//# sourceMappingURL=trending-up.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst User = createLucideIcon(\"User\", [\n [\"path\", { d: \"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\", key: \"975kel\" }],\n [\"circle\", { cx: \"12\", cy: \"7\", r: \"4\", key: \"17ys0d\" }]\n]);\n\nexport { User as default };\n//# sourceMappingURL=user.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Users = createLucideIcon(\"Users\", [\n [\"path\", { d: \"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2\", key: \"1yyitq\" }],\n [\"circle\", { cx: \"9\", cy: \"7\", r: \"4\", key: \"nufk8\" }],\n [\"path\", { d: \"M22 21v-2a4 4 0 0 0-3-3.87\", key: \"kshegd\" }],\n [\"path\", { d: \"M16 3.13a4 4 0 0 1 0 7.75\", key: \"1da9ce\" }]\n]);\n\nexport { Users as default };\n//# sourceMappingURL=users.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Video = createLucideIcon(\"Video\", [\n [\"path\", { d: \"m22 8-6 4 6 4V8Z\", key: \"50v9me\" }],\n [\n \"rect\",\n {\n width: \"14\",\n height: \"12\",\n x: \"2\",\n y: \"6\",\n rx: \"2\",\n ry: \"2\",\n key: \"1rqjg6\"\n }\n ]\n]);\n\nexport { Video as default };\n//# sourceMappingURL=video.js.map\n","/**\n * lucide-react v0.285.0 - ISC\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst X = createLucideIcon(\"X\", [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n]);\n\nexport { X as default };\n//# sourceMappingURL=x.js.map\n","\nimport { cn } from \"@/lib/utils\";\nimport * as ToastPrimitives from \"@radix-ui/react-toast\";\nimport { cva } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\nimport React from \"react\";\n\nconst ToastProvider = ToastPrimitives.Provider;\n\nconst ToastViewport = React.forwardRef(({ className, ...props }, ref) => (\n \n));\nToastViewport.displayName = ToastPrimitives.Viewport.displayName;\n\nconst toastVariants = cva(\n \"group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full\",\n {\n variants: {\n variant: {\n default: \"border bg-white text-foreground dark:bg-gray-800\",\n destructive:\n \"destructive group border-destructive bg-destructive text-destructive-foreground\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n },\n }\n);\n\nconst Toast = React.forwardRef(({ className, variant, ...props }, ref) => {\n return (\n \n );\n});\nToast.displayName = ToastPrimitives.Root.displayName;\n\nconst ToastAction = React.forwardRef(({ className, ...props }, ref) => (\n \n));\nToastAction.displayName = ToastPrimitives.Action.displayName;\n\nconst ToastClose = React.forwardRef(({ className, ...props }, ref) => (\n \n \n \n));\nToastClose.displayName = ToastPrimitives.Close.displayName;\n\nconst ToastTitle = React.forwardRef(({ className, ...props }, ref) => (\n \n));\nToastTitle.displayName = ToastPrimitives.Title.displayName;\n\nconst ToastDescription = React.forwardRef(({ className, ...props }, ref) => (\n \n));\nToastDescription.displayName = ToastPrimitives.Description.displayName;\n\nexport {\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n};\n","\nimport {\n Toast,\n ToastClose,\n ToastDescription,\n ToastProvider,\n ToastTitle,\n ToastViewport,\n} from \"@/components/ui/toast\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport React from \"react\";\n\nexport function Toaster() {\n const { toasts } = useToast();\n\n return (\n \n {toasts.map(function ({ id, title, description, action, ...props }) {\n return (\n \n
\n {title && {title}}\n {description && (\n {description}\n )}\n
\n {action}\n \n
\n );\n })}\n \n
\n );\n}\n","\n// Update the Button component to handle loading state\nimport { cn } from '@/lib/utils';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva } from 'class-variance-authority';\nimport React from 'react';\nimport { Loader2 } from 'lucide-react';\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\nconst Button = React.forwardRef(({ \n className, \n variant, \n size, \n asChild = false,\n loading = false,\n children,\n ...props \n}, ref) => {\n const Comp = asChild ? Slot : 'button';\n return (\n \n {loading ? (\n <>\n \n {typeof children === 'string' ? 'Loading...' : children}\n \n ) : (\n children\n )}\n \n );\n});\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","\nimport React from \"react\";\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"@/lib/utils\";\n\nconst Dialog = DialogPrimitive.Root;\nconst DialogTrigger = DialogPrimitive.Trigger;\nconst DialogPortal = DialogPrimitive.Portal;\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef(({ className, ...props }, ref) => (\n \n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef(({ className, children, ...props }, ref) => (\n \n \n \n {children}\n \n \n Close\n \n \n \n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }) => (\n \n);\nDialogHeader.displayName = \"DialogHeader\";\n\nconst DialogFooter = ({ className, ...props }) => (\n \n);\nDialogFooter.displayName = \"DialogFooter\";\n\nconst DialogTitle = React.forwardRef(({ className, ...props }, ref) => (\n \n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef(({ className, ...props }, ref) => (\n \n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","\nimport React from \"react\";\nimport { cn } from \"@/lib/utils\";\n\nconst Input = React.forwardRef(({ className, type, ...props }, ref) => {\n return (\n \n );\n});\nInput.displayName = \"Input\";\n\nexport { Input };\n","\"use client\";\n\n// packages/react/label/src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.label,\n {\n ...props,\n ref: forwardedRef,\n onMouseDown: (event) => {\n const target = event.target;\n if (target.closest(\"button, input, select, textarea\")) return;\n props.onMouseDown?.(event);\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }\n }\n );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n Label,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\nimport React from \"react\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { cn } from \"@/lib/utils\";\n\nconst Label = React.forwardRef(({ className, ...props }, ref) => (\n \n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","\nimport React, { useState } from 'react';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle } from \"@/components/ui/dialog\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { useAuth } from \"../contexts/AuthContext\";\nimport { Loader2, Mail, Lock, User, Chrome } from \"lucide-react\";\n\nfunction AuthDialog({ isOpen, onClose, onSuccess }) {\n const [isSignUp, setIsSignUp] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const { signIn, signUp, signInWithGoogle } = useAuth();\n const { toast } = useToast();\n\n const [formData, setFormData] = useState({\n email: '',\n password: '',\n firstName: '',\n lastName: '',\n });\n\n const [errors, setErrors] = useState({});\n\n const validateForm = () => {\n const newErrors = {};\n \n if (!formData.email) {\n newErrors.email = 'Email is required';\n } else if (!/\\S+@\\S+\\.\\S+/.test(formData.email)) {\n newErrors.email = 'Invalid email address';\n }\n\n if (!formData.password) {\n newErrors.password = 'Password is required';\n } else if (formData.password.length < 6) {\n newErrors.password = 'Password must be at least 6 characters';\n }\n\n if (isSignUp) {\n if (!formData.firstName) {\n newErrors.firstName = 'First name is required';\n }\n if (!formData.lastName) {\n newErrors.lastName = 'Last name is required';\n }\n }\n\n setErrors(newErrors);\n return Object.keys(newErrors).length === 0;\n };\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n \n if (!validateForm()) {\n return;\n }\n\n setIsLoading(true);\n try {\n if (isSignUp) {\n await signUp(formData);\n toast({\n title: \"Success!\",\n description: \"Please check your email to verify your account.\",\n });\n } else {\n await signIn({\n email: formData.email,\n password: formData.password\n });\n toast({\n title: \"Success!\",\n description: \"Signed in successfully\",\n });\n }\n onSuccess();\n onClose();\n } catch (error) {\n console.error('Authentication error:', error);\n toast({\n title: \"Error\",\n description: error.message || \"Authentication failed. Please try again.\",\n variant: \"destructive\",\n });\n } finally {\n setIsLoading(false);\n }\n };\n\n const handleGoogleSignIn = async () => {\n try {\n setIsLoading(true);\n console.log('Starting Google sign in...');\n await signInWithGoogle();\n console.log('Google sign in completed');\n onSuccess();\n onClose();\n toast({\n title: \"Success!\",\n description: \"Signed in with Google successfully\",\n });\n } catch (error) {\n console.error('Google sign in error:', error);\n toast({\n title: \"Error\",\n description: \"Failed to sign in with Google. Please try again.\",\n variant: \"destructive\",\n });\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n \n \n \n \n {isSignUp ? \"Create an account\" : \"Welcome back\"}\n \n \n\n
\n {isSignUp && (\n
\n
\n \n setFormData({ ...formData, firstName: e.target.value })}\n placeholder=\"John\"\n className={errors.firstName ? \"border-red-500\" : \"\"}\n />\n {errors.firstName && (\n

{errors.firstName}

\n )}\n
\n\n
\n \n setFormData({ ...formData, lastName: e.target.value })}\n placeholder=\"Doe\"\n className={errors.lastName ? \"border-red-500\" : \"\"}\n />\n {errors.lastName && (\n

{errors.lastName}

\n )}\n
\n
\n )}\n\n
\n \n
\n \n setFormData({ ...formData, email: e.target.value })}\n placeholder=\"you@example.com\"\n className={`pl-10 ${errors.email ? \"border-red-500\" : \"\"}`}\n />\n
\n {errors.email && (\n

{errors.email}

\n )}\n
\n\n
\n \n
\n \n setFormData({ ...formData, password: e.target.value })}\n placeholder=\"••••••••\"\n className={`pl-10 ${errors.password ? \"border-red-500\" : \"\"}`}\n />\n
\n {errors.password && (\n

{errors.password}

\n )}\n
\n\n \n\n
\n
\n \n
\n
\n \n Or continue with\n \n
\n
\n\n \n \n Sign in with Google\n \n\n
\n {isSignUp ? (\n <>\n Already have an account?{\" \"}\n setIsSignUp(false)}\n >\n Sign in\n \n \n ) : (\n <>\n Don't have an account?{\" \"}\n setIsSignUp(true)}\n >\n Sign up\n \n \n )}\n
\n \n
\n
\n );\n}\n\nexport default AuthDialog;\n","\nimport React, { useState } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { useNavigate } from \"react-router-dom\";\nimport { Button } from \"@/components/ui/button\";\nimport { useAuth } from \"../contexts/AuthContext\";\nimport { User, Settings, LogOut, ChevronDown } from \"lucide-react\";\nimport AuthDialog from \"./AuthDialog\";\nimport { useToast } from \"@/components/ui/use-toast\";\n\nfunction UserNav() {\n const navigate = useNavigate();\n const { user, signOut } = useAuth();\n const { toast } = useToast();\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n const [showAuthDialog, setShowAuthDialog] = useState(false);\n\n const handleLogout = async () => {\n try {\n await signOut();\n setIsDropdownOpen(false);\n navigate('/');\n toast({\n title: \"Success\",\n description: \"You have been logged out successfully\",\n });\n } catch (error) {\n console.error('Logout error:', error);\n toast({\n title: \"Error\",\n description: \"Failed to log out. Please try again.\",\n variant: \"destructive\",\n });\n }\n };\n\n const handleNavigation = (path) => {\n setIsDropdownOpen(false);\n navigate(path);\n };\n\n const handleAuthSuccess = () => {\n setShowAuthDialog(false);\n toast({\n title: \"Success\",\n description: \"You have been logged in successfully\",\n });\n };\n\n return (\n
\n {user ? (\n <>\n setIsDropdownOpen(!isDropdownOpen)}\n className=\"flex items-center space-x-2 p-2 rounded-lg hover:bg-gray-100 dark:hover:bg-gray-800\"\n >\n
\n \n {user.firstName?.[0]?.toUpperCase() || user.email[0].toUpperCase()}\n \n
\n \n \n\n \n {isDropdownOpen && (\n \n
\n

\n {user.firstName} {user.lastName}\n

\n

\n {user.email}\n

\n
\n\n
\n handleNavigation('/settings')}\n className=\"w-full px-4 py-2 text-left flex items-center space-x-2 hover:bg-gray-100 dark:hover:bg-gray-700\"\n >\n \n Account\n \n\n handleNavigation('/settings')}\n className=\"w-full px-4 py-2 text-left flex items-center space-x-2 hover:bg-gray-100 dark:hover:bg-gray-700\"\n >\n \n Settings\n \n\n \n \n Logout\n \n
\n \n )}\n
\n \n ) : (\n setShowAuthDialog(true)}\n className=\"flex items-center space-x-2\"\n >\n \n Login / Sign Up\n \n )}\n\n setShowAuthDialog(false)}\n onSuccess={handleAuthSuccess}\n />\n
\n );\n}\n\nexport default UserNav;\n","\nimport React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Button } from \"./ui/button\";\nimport UserNav from \"./UserNav\";\nimport { useAuth } from \"../contexts/AuthContext\";\n\nfunction Navbar() {\n const { user } = useAuth();\n\n return (\n \n );\n}\n\nexport default Navbar;\n","\nimport React from \"react\";\nimport { motion } from \"framer-motion\";\nimport { Button } from \"./ui/button\";\nimport { ArrowRight } from \"lucide-react\";\n\nfunction Hero() {\n return (\n
\n {/* Background Pattern */}\n
\n\n
\n \n \n Make Smarter Property Investments with{\" \"}\n AI-Powered Analysis\n \n\n \n Get instant property analysis, accurate ROI projections, and comprehensive market insights powered by artificial intelligence.\n \n\n \n \n \n \n\n {/* Trust Indicators */}\n \n
\n

10K+

\n

Properties Analyzed

\n
\n
\n

95%

\n

Accuracy Rate

\n
\n
\n

5K+

\n

Active Users

\n
\n
\n

$2B+

\n

Properties Value

\n
\n \n \n
\n
\n );\n}\n\nexport default Hero;\n","\nimport React from \"react\";\nimport { motion } from \"framer-motion\";\nimport { \n BarChart3,\n TrendingUp,\n Brain,\n Building,\n Users,\n Shield\n} from \"lucide-react\";\n\nfunction Features() {\n const features = [\n {\n icon: BarChart3,\n title: \"Advanced Analytics\",\n description: \"Get detailed property analysis with comprehensive metrics and insights.\"\n },\n {\n icon: Brain,\n title: \"AI-Powered Insights\",\n description: \"Leverage artificial intelligence for smarter investment decisions.\"\n },\n {\n icon: TrendingUp,\n title: \"Market Trends\",\n description: \"Stay ahead with real-time market data and trend analysis.\"\n },\n {\n icon: Building,\n title: \"Portfolio Management\",\n description: \"Track and manage your property investments in one place.\"\n },\n {\n icon: Users,\n title: \"Expert Community\",\n description: \"Connect with real estate professionals and fellow investors.\"\n },\n {\n icon: Shield,\n title: \"Risk Assessment\",\n description: \"Evaluate investment risks with our comprehensive analysis tools.\"\n }\n ];\n\n return (\n
\n
\n
\n \n Powerful Features for Smart Investments\n \n \n Everything you need to make informed property investment decisions\n \n
\n\n
\n {features.map((feature, index) => {\n const Icon = feature.icon;\n return (\n \n
\n \n
\n

\n {feature.title}\n

\n

\n {feature.description}\n

\n \n );\n })}\n
\n
\n
\n );\n}\n\nexport default Features;\n","\nimport React from \"react\";\nimport { motion } from \"framer-motion\";\nimport { Star } from \"lucide-react\";\n\nfunction Testimonials() {\n const testimonials = [\n {\n name: \"John Smith\",\n role: \"Real Estate Investor\",\n image: \"john-smith.jpg\",\n content: \"This tool has completely transformed how I analyze investment properties. The AI-powered insights have helped me make better investment decisions.\",\n rating: 5\n },\n {\n name: \"Sarah Johnson\",\n role: \"Property Manager\",\n image: \"sarah-johnson.jpg\",\n content: \"The market analysis features are incredibly accurate. I've been able to spot opportunities that I would have missed otherwise.\",\n rating: 5\n },\n {\n name: \"Michael Brown\",\n role: \"Real Estate Agent\",\n image: \"michael-brown.jpg\",\n content: \"My clients love the professional reports this generates. It's become an essential tool in my business.\",\n rating: 5\n }\n ];\n\n return (\n
\n
\n
\n \n Trusted by Industry Professionals\n \n \n See what our users have to say about their experience\n \n
\n\n
\n {testimonials.map((testimonial, index) => (\n \n
\n \n
\n

\n {testimonial.name}\n

\n

\n {testimonial.role}\n

\n
\n
\n
\n {[...Array(testimonial.rating)].map((_, i) => (\n \n ))}\n
\n

\n \"{testimonial.content}\"\n

\n \n ))}\n
\n
\n
\n );\n}\n\nexport default Testimonials;\n","var V3_URL = 'https://js.stripe.com/v3';\nvar V3_URL_REGEX = /^https:\\/\\/js\\.stripe\\.com\\/v3\\/?(\\?.*)?$/;\nvar EXISTING_SCRIPT_MESSAGE = 'loadStripe.setLoadParameters was called but an existing Stripe.js script already exists in the document; existing script parameters will be used';\nvar findScript = function findScript() {\n var scripts = document.querySelectorAll(\"script[src^=\\\"\".concat(V3_URL, \"\\\"]\"));\n\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n\n if (!V3_URL_REGEX.test(script.src)) {\n continue;\n }\n\n return script;\n }\n\n return null;\n};\n\nvar injectScript = function injectScript(params) {\n var queryString = params && !params.advancedFraudSignals ? '?advancedFraudSignals=false' : '';\n var script = document.createElement('script');\n script.src = \"\".concat(V3_URL).concat(queryString);\n var headOrBody = document.head || document.body;\n\n if (!headOrBody) {\n throw new Error('Expected document.body not to be null. Stripe.js requires a element.');\n }\n\n headOrBody.appendChild(script);\n return script;\n};\n\nvar registerWrapper = function registerWrapper(stripe, startTime) {\n if (!stripe || !stripe._registerWrapper) {\n return;\n }\n\n stripe._registerWrapper({\n name: 'stripe-js',\n version: \"2.4.0\",\n startTime: startTime\n });\n};\n\nvar stripePromise = null;\nvar onErrorListener = null;\nvar onLoadListener = null;\n\nvar onError = function onError(reject) {\n return function () {\n reject(new Error('Failed to load Stripe.js'));\n };\n};\n\nvar onLoad = function onLoad(resolve, reject) {\n return function () {\n if (window.Stripe) {\n resolve(window.Stripe);\n } else {\n reject(new Error('Stripe.js not available'));\n }\n };\n};\n\nvar loadScript = function loadScript(params) {\n // Ensure that we only attempt to load Stripe.js at most once\n if (stripePromise !== null) {\n return stripePromise;\n }\n\n stripePromise = new Promise(function (resolve, reject) {\n if (typeof window === 'undefined' || typeof document === 'undefined') {\n // Resolve to null when imported server side. This makes the module\n // safe to import in an isomorphic code base.\n resolve(null);\n return;\n }\n\n if (window.Stripe && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n }\n\n if (window.Stripe) {\n resolve(window.Stripe);\n return;\n }\n\n try {\n var script = findScript();\n\n if (script && params) {\n console.warn(EXISTING_SCRIPT_MESSAGE);\n } else if (!script) {\n script = injectScript(params);\n } else if (script && onLoadListener !== null && onErrorListener !== null) {\n var _script$parentNode;\n\n // remove event listeners\n script.removeEventListener('load', onLoadListener);\n script.removeEventListener('error', onErrorListener); // if script exists, but we are reloading due to an error,\n // reload script to trigger 'load' event\n\n (_script$parentNode = script.parentNode) === null || _script$parentNode === void 0 ? void 0 : _script$parentNode.removeChild(script);\n script = injectScript(params);\n }\n\n onLoadListener = onLoad(resolve, reject);\n onErrorListener = onError(reject);\n script.addEventListener('load', onLoadListener);\n script.addEventListener('error', onErrorListener);\n } catch (error) {\n reject(error);\n return;\n }\n }); // Resets stripePromise on error\n\n return stripePromise[\"catch\"](function (error) {\n stripePromise = null;\n return Promise.reject(error);\n });\n};\nvar initStripe = function initStripe(maybeStripe, args, startTime) {\n if (maybeStripe === null) {\n return null;\n }\n\n var stripe = maybeStripe.apply(undefined, args);\n registerWrapper(stripe, startTime);\n return stripe;\n}; // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\nvar stripePromise$1;\nvar loadCalled = false;\n\nvar getStripePromise = function getStripePromise() {\n if (stripePromise$1) {\n return stripePromise$1;\n }\n\n stripePromise$1 = loadScript(null)[\"catch\"](function (error) {\n // clear cache on error\n stripePromise$1 = null;\n return Promise.reject(error);\n });\n return stripePromise$1;\n}; // Execute our own script injection after a tick to give users time to do their\n// own script injection.\n\n\nPromise.resolve().then(function () {\n return getStripePromise();\n})[\"catch\"](function (error) {\n if (!loadCalled) {\n console.warn(error);\n }\n});\nvar loadStripe = function loadStripe() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n loadCalled = true;\n var startTime = Date.now(); // if previous attempts are unsuccessful, will re-load script\n\n return getStripePromise().then(function (maybeStripe) {\n return initStripe(maybeStripe, args, startTime);\n });\n};\n\nexport { loadStripe };\n","\nexport const STRIPE_CONFIG = {\n publishableKey: 'pk_live_51QEGXg2LybNlvXQb18yJyxbv9w53l3hpYroSTw6D6UUGglCj6qE8eg2DGQHhMMokxBT77P5XTy3ZBEtvFApu9QhV00U9kDE04k',\n products: {\n pro: {\n id: 'prod_RywB8iOsaR7LHg',\n price: 79,\n name: 'Pro Plan',\n features: [\n 'Unlimited Property Analyses',\n 'Advanced ROI Projections',\n 'Risk Assessment Tools',\n 'Priority Support',\n 'Custom Reports',\n 'API Access',\n ],\n limits: {\n analyses: Infinity,\n comparisons: Infinity,\n savedProperties: Infinity,\n }\n }\n }\n};\n","\nimport { loadStripe } from '@stripe/stripe-js';\nimport { supabase } from './supabase';\nimport { STRIPE_CONFIG } from './stripe-config';\n\nconst stripePromise = loadStripe(STRIPE_CONFIG.publishableKey);\n\nexport async function createCheckoutSession(priceId, userId) {\n try {\n const response = await fetch('/api/create-checkout-session', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n priceId,\n userId,\n successUrl: `${window.location.origin}/payment-success`,\n cancelUrl: `${window.location.origin}/pricing`,\n }),\n });\n\n const session = await response.json();\n\n if (!session || !session.id) {\n throw new Error('Failed to create checkout session');\n }\n\n const stripe = await stripePromise;\n const { error } = await stripe.redirectToCheckout({\n sessionId: session.id,\n });\n\n if (error) throw error;\n\n } catch (error) {\n console.error('Error creating checkout session:', error);\n throw error;\n }\n}\n\nexport const subscriptionPlans = {\n pro: {\n name: 'Pro',\n price: 79,\n interval: 'month',\n features: [\n 'Unlimited property analyses',\n 'Advanced market insights',\n 'AI-powered recommendations',\n 'Priority support',\n 'Custom reports',\n 'Portfolio tracking',\n ],\n limits: {\n analyses: Infinity,\n comparisons: Infinity,\n savedProperties: Infinity,\n },\n }\n};\n\nexport const usageTracker = {\n async checkUsage(userId, action) {\n try {\n const { data: subscription } = await supabase\n .from('subscriptions')\n .select('*')\n .eq('user_id', userId)\n .single();\n\n if (!subscription) {\n return { allowed: false, reason: 'No active subscription' };\n }\n\n const plan = subscriptionPlans[subscription.plan];\n \n const { count } = await supabase\n .from('usage')\n .select('*', { count: 'exact' })\n .eq('user_id', userId)\n .eq('action', action)\n .gte('created_at', new Date(new Date().setMonth(new Date().getMonth() - 1)).toISOString());\n\n return {\n allowed: count < plan.limits[action],\n current: count,\n limit: plan.limits[action],\n };\n } catch (error) {\n console.error('Error checking usage:', error);\n throw error;\n }\n },\n\n async trackUsage(userId, action) {\n try {\n await supabase\n .from('usage')\n .insert([{\n user_id: userId,\n action,\n created_at: new Date().toISOString(),\n }]);\n } catch (error) {\n console.error('Error tracking usage:', error);\n throw error;\n }\n }\n};\n","\nimport React, { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { useNavigate } from \"react-router-dom\";\nimport { Button } from \"@/components/ui/button\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { Check } from \"lucide-react\";\nimport { useAuth } from \"../contexts/AuthContext\";\nimport { createCheckoutSession } from \"../lib/stripe\";\nimport AuthDialog from \"./AuthDialog\";\n\nconst plans = [\n {\n name: \"Basic\",\n price: \"$29\",\n priceId: \"price_basic\",\n features: [\n \"10 Property Analyses per Month\",\n \"Basic ROI Calculations\",\n \"Market Trends Access\",\n \"Email Support\",\n \"PDF Report Export\",\n ],\n },\n {\n name: \"Pro\",\n price: \"$79\",\n priceId: \"price_pro\",\n features: [\n \"Unlimited Property Analyses\",\n \"Advanced ROI Projections\",\n \"Risk Assessment Tools\",\n \"Priority Support\",\n \"Custom Reports\",\n \"API Access\",\n ],\n popular: true,\n },\n {\n name: \"Pay Per Use\",\n price: \"$9.99\",\n priceId: \"price_pay_per_use\",\n features: [\n \"Single Property Analysis\",\n \"Basic ROI Calculations\",\n \"PDF Report Export\",\n \"24-Hour Access\",\n \"No Subscription Required\",\n ],\n perReport: true,\n },\n];\n\nfunction Pricing() {\n const navigate = useNavigate();\n const { user } = useAuth();\n const { toast } = useToast();\n const [isAuthOpen, setIsAuthOpen] = useState(false);\n const [selectedPlan, setSelectedPlan] = useState(null);\n const [isProcessing, setIsProcessing] = useState(false);\n\n const handlePlanSelect = async (plan) => {\n if (!user) {\n setSelectedPlan(plan);\n setIsAuthOpen(true);\n return;\n }\n\n try {\n setIsProcessing(true);\n await createCheckoutSession(plan.priceId, user.id);\n } catch (error) {\n console.error('Checkout error:', error);\n toast({\n title: \"Error\",\n description: \"Failed to process payment. Please try again.\",\n variant: \"destructive\",\n });\n } finally {\n setIsProcessing(false);\n }\n };\n\n const handleAuthSuccess = async () => {\n setIsAuthOpen(false);\n if (selectedPlan) {\n await handlePlanSelect(selectedPlan);\n }\n };\n\n return (\n
\n \n
\n

\n Simple, Transparent Pricing\n

\n

\n Choose the perfect plan for your investment needs\n

\n
\n\n
\n {plans.map((plan) => (\n \n {plan.popular && (\n \n Most Popular\n \n )}\n\n

{plan.name}

\n
\n {plan.price}\n \n {plan.perReport ? \"/report\" : \"/month\"}\n \n
\n\n
    \n {plan.features.map((feature) => (\n
  • \n \n {feature}\n
  • \n ))}\n
\n\n handlePlanSelect(plan)}\n disabled={isProcessing}\n >\n {isProcessing ? \"Processing...\" : \"Get Started\"}\n \n \n ))}\n
\n \n\n setIsAuthOpen(false)}\n onSuccess={handleAuthSuccess}\n />\n
\n );\n}\n\nexport default Pricing;\n","\nimport React, { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { Button } from \"./ui/button\";\nimport { Input } from \"./ui/input\";\nimport { useToast } from \"./ui/use-toast\";\nimport { Mail } from \"lucide-react\";\n\nfunction Newsletter() {\n const [email, setEmail] = useState(\"\");\n const [loading, setLoading] = useState(false);\n const { toast } = useToast();\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n setLoading(true);\n\n try {\n // Add newsletter signup logic here\n await new Promise(resolve => setTimeout(resolve, 1000)); // Simulate API call\n\n toast({\n title: \"Success!\",\n description: \"Thank you for subscribing to our newsletter.\",\n });\n\n setEmail(\"\");\n } catch (error) {\n toast({\n title: \"Error\",\n description: \"Failed to subscribe. Please try again.\",\n variant: \"destructive\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n return (\n
\n
\n
\n \n \n

\n Stay Updated with Market Insights\n

\n

\n Get the latest property market trends and investment opportunities delivered to your inbox.\n

\n\n
\n setEmail(e.target.value)}\n className=\"flex-1\"\n required\n />\n \n \n\n

\n Join 5,000+ subscribers. No spam, unsubscribe anytime.\n

\n \n
\n
\n
\n );\n}\n\nexport default Newsletter;\n","\nimport React, { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { Button } from \"./ui/button\";\nimport { Input } from \"./ui/input\";\nimport { Label } from \"./ui/label\";\nimport { useToast } from \"./ui/use-toast\";\nimport { Calendar, Phone, User } from \"lucide-react\";\n\nfunction DemoRequest() {\n const [formData, setFormData] = useState({\n name: \"\",\n email: \"\",\n phone: \"\",\n company: \"\",\n preferredDate: \"\",\n });\n const [loading, setLoading] = useState(false);\n const { toast } = useToast();\n\n const handleSubmit = async (e) => {\n e.preventDefault();\n setLoading(true);\n\n try {\n // Add demo request logic here\n await new Promise(resolve => setTimeout(resolve, 1000)); // Simulate API call\n\n toast({\n title: \"Demo Requested!\",\n description: \"We'll contact you shortly to schedule your demo.\",\n });\n\n setFormData({\n name: \"\",\n email: \"\",\n phone: \"\",\n company: \"\",\n preferredDate: \"\",\n });\n } catch (error) {\n toast({\n title: \"Error\",\n description: \"Failed to submit request. Please try again.\",\n variant: \"destructive\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n return (\n
\n
\n
\n \n

\n Request a Demo\n

\n

\n See how our AI-powered analysis can transform your investment strategy.\n

\n \n\n \n
\n
\n \n
\n \n setFormData({ ...formData, name: e.target.value })}\n className=\"pl-10\"\n required\n />\n
\n
\n\n
\n \n setFormData({ ...formData, email: e.target.value })}\n required\n />\n
\n\n
\n \n
\n \n setFormData({ ...formData, phone: e.target.value })}\n className=\"pl-10\"\n required\n />\n
\n
\n\n
\n \n setFormData({ ...formData, company: e.target.value })}\n />\n
\n\n
\n \n
\n \n setFormData({ ...formData, preferredDate: e.target.value })}\n className=\"pl-10\"\n required\n />\n
\n
\n
\n\n \n \n
\n
\n
\n );\n}\n\nexport default DemoRequest;\n","\nimport React, { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { Button } from \"./ui/button\";\nimport { Input } from \"./ui/input\";\nimport { Label } from \"./ui/label\";\nimport { useToast } from \"./ui/use-toast\";\nimport { Share2, Gift, Users, DollarSign } from \"lucide-react\";\n\nfunction ReferralSystem() {\n const [referralCode, setReferralCode] = useState(\"USER123\"); // Example code\n const { toast } = useToast();\n\n const copyReferralLink = async () => {\n try {\n await navigator.clipboard.writeText(`${window.location.origin}?ref=${referralCode}`);\n toast({\n title: \"Copied!\",\n description: \"Referral link copied to clipboard\",\n });\n } catch (error) {\n toast({\n title: \"Error\",\n description: \"Failed to copy referral link\",\n variant: \"destructive\",\n });\n }\n };\n\n return (\n
\n
\n
\n \n \n

\n Refer & Earn Rewards\n

\n

\n Share with your network and earn rewards for every successful referral.\n

\n\n
\n \n
\n \n \n
\n
\n\n
\n
\n \n

Refer Friends

\n

\n Share your unique referral link with friends\n

\n
\n\n
\n \n

Earn Rewards

\n

\n Get $50 credit for each successful referral\n

\n
\n\n
\n \n

They Save Too

\n

\n Your friends get 20% off their first month\n

\n
\n
\n \n
\n
\n
\n );\n}\n\nexport default ReferralSystem;\n","\nimport React from \"react\";\nimport { motion } from \"framer-motion\";\n\nconst faqs = [\n {\n question: \"How accurate are the AI-powered predictions?\",\n answer:\n \"Our AI models are trained on millions of real estate transactions and market data points, providing accuracy rates of over 90% in most markets.\",\n },\n {\n question: \"Can I analyze multiple properties simultaneously?\",\n answer:\n \"Yes! Depending on your subscription plan, you can analyze multiple properties and even compare them side by side.\",\n },\n {\n question: \"What data sources do you use?\",\n answer:\n \"We aggregate data from multiple reliable sources including MLS listings, public records, economic indicators, and market trends.\",\n },\n {\n question: \"Is my data secure?\",\n answer:\n \"Absolutely. We use bank-level encryption and follow strict data protection protocols to ensure your information is always secure.\",\n },\n];\n\nconst containerVariants = {\n hidden: { opacity: 0 },\n visible: {\n opacity: 1,\n transition: {\n staggerChildren: 0.2,\n delayChildren: 0.3,\n },\n },\n};\n\nconst itemVariants = {\n hidden: { opacity: 0, x: -20 },\n visible: {\n opacity: 1,\n x: 0,\n transition: {\n duration: 0.6,\n ease: \"easeOut\",\n },\n },\n};\n\nfunction FAQ() {\n return (\n
\n \n
\n \n Frequently Asked Questions\n \n \n Everything you need to know about our platform\n \n
\n\n
\n {faqs.map((faq, index) => (\n \n

\n {faq.question}\n

\n

{faq.answer}

\n \n ))}\n
\n \n
\n );\n}\n\nexport default FAQ;\n","\nimport React, { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { useToast } from \"@/components/ui/use-toast\";\n\nfunction ContactForm() {\n const { toast } = useToast();\n const [formData, setFormData] = useState({\n name: \"\",\n email: \"\",\n message: \"\",\n });\n\n const handleSubmit = (e) => {\n e.preventDefault();\n toast({\n title: \"Message Sent!\",\n description: \"We'll get back to you as soon as possible.\",\n });\n setFormData({ name: \"\", email: \"\", message: \"\" });\n };\n\n const handleChange = (e) => {\n const { name, value } = e.target;\n setFormData((prev) => ({ ...prev, [name]: value }));\n };\n\n return (\n
\n
\n
\n \n

\n Get in Touch\n

\n

\n Have questions? We're here to help!\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\nexport default ContactForm;\n","\nimport React from \"react\";\nimport { motion } from \"framer-motion\";\nimport Hero from \"../components/Hero\";\nimport Features from \"../components/Features\";\nimport Testimonials from \"../components/Testimonials\";\nimport Pricing from \"../components/Pricing\";\nimport Newsletter from \"../components/Newsletter\";\nimport DemoRequest from \"../components/DemoRequest\";\nimport ReferralSystem from \"../components/ReferralSystem\";\nimport FAQ from \"../components/FAQ\";\nimport ContactForm from \"../components/ContactForm\";\n\nfunction LandingPage() {\n return (\n
\n {/* Hero Section with Clear Value Proposition */}\n \n\n {/* Feature Showcase */}\n \n\n {/* Testimonials */}\n \n\n {/* Pricing Plans */}\n \n\n {/* Newsletter Signup */}\n \n\n {/* Demo Request */}\n \n\n {/* Referral System */}\n \n\n {/* FAQ Section */}\n \n\n {/* Contact Form */}\n \n
\n );\n}\n\nexport default LandingPage;\n","\nimport React, { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { Button } from \"@/components/ui/button\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport {\n Calculator,\n DollarSign,\n Percent,\n Building,\n TrendingUp,\n Download,\n ChevronRight,\n} from \"lucide-react\";\n\nfunction ROICalculator() {\n const { toast } = useToast();\n const [loading, setLoading] = useState(false);\n const [results, setResults] = useState(null);\n \n const [formData, setFormData] = useState({\n purchasePrice: \"\",\n downPayment: \"20\",\n interestRate: \"4.5\",\n loanTerm: \"30\",\n monthlyRent: \"\",\n propertyTax: \"\",\n insurance: \"\",\n maintenance: \"1\",\n vacancy: \"5\",\n propertyManager: \"8\",\n });\n\n const handleInputChange = (e) => {\n const { name, value } = e.target;\n setFormData(prev => ({\n ...prev,\n [name]: value\n }));\n };\n\n const calculateROI = () => {\n if (!formData.purchasePrice || !formData.monthlyRent) {\n toast({\n title: \"Missing Information\",\n description: \"Please enter purchase price and monthly rent.\",\n variant: \"destructive\",\n });\n return;\n }\n\n setLoading(true);\n \n setTimeout(() => {\n try {\n // Calculate loan amount\n const loanAmount = formData.purchasePrice * (1 - formData.downPayment / 100);\n \n // Calculate monthly mortgage payment\n const monthlyRate = (formData.interestRate / 100) / 12;\n const numberOfPayments = formData.loanTerm * 12;\n const monthlyMortgage = (loanAmount * monthlyRate * Math.pow(1 + monthlyRate, numberOfPayments)) / \n (Math.pow(1 + monthlyRate, numberOfPayments) - 1);\n\n // Calculate monthly expenses\n const monthlyTax = formData.propertyTax / 12;\n const monthlyInsurance = formData.insurance / 12;\n const monthlyMaintenance = (formData.purchasePrice * (formData.maintenance / 100)) / 12;\n const monthlyVacancy = formData.monthlyRent * (formData.vacancy / 100);\n const monthlyManagement = formData.monthlyRent * (formData.propertyManager / 100);\n\n const totalMonthlyExpenses = monthlyMortgage + monthlyTax + monthlyInsurance + \n monthlyMaintenance + monthlyVacancy + monthlyManagement;\n\n // Calculate cash flow\n const monthlyCashFlow = formData.monthlyRent - totalMonthlyExpenses;\n const annualCashFlow = monthlyCashFlow * 12;\n\n // Calculate total investment\n const downPayment = formData.purchasePrice * (formData.downPayment / 100);\n const closingCosts = formData.purchasePrice * 0.03; // Estimated closing costs\n const totalInvestment = downPayment + closingCosts;\n\n // Calculate ROI\n const cashOnCashROI = (annualCashFlow / totalInvestment) * 100;\n\n // Calculate 5-year appreciation\n const futureValue = formData.purchasePrice * Math.pow(1 + 0.03, 5); // Assuming 3% annual appreciation\n const totalAppreciation = futureValue - formData.purchasePrice;\n\n setResults({\n monthlyMortgage: monthlyMortgage.toFixed(2),\n monthlyCashFlow: monthlyCashFlow.toFixed(2),\n cashOnCashROI: cashOnCashROI.toFixed(2),\n totalInvestment: totalInvestment.toFixed(2),\n futureValue: futureValue.toFixed(2),\n totalAppreciation: totalAppreciation.toFixed(2),\n monthlyExpenses: totalMonthlyExpenses.toFixed(2),\n capRate: ((annualCashFlow / formData.purchasePrice) * 100).toFixed(2)\n });\n\n toast({\n title: \"Calculation Complete\",\n description: \"Your ROI analysis has been generated successfully.\",\n });\n } catch (error) {\n console.error('Calculation error:', error);\n toast({\n title: \"Calculation Error\",\n description: \"Please check your input values and try again.\",\n variant: \"destructive\",\n });\n } finally {\n setLoading(false);\n }\n }, 1000);\n };\n\n return (\n
\n
\n \n

\n ROI Calculator\n

\n

\n Calculate your potential return on investment\n

\n \n\n
\n {/* Input Form */}\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 {/* Results */}\n {results && (\n \n

Investment Analysis

\n \n
\n
\n
\n

Monthly Cash Flow

\n

\n ${results.monthlyCashFlow}\n

\n
\n \n
\n

Cash on Cash ROI

\n

\n {results.cashOnCashROI}%\n

\n
\n
\n\n
\n
\n Monthly Mortgage\n ${results.monthlyMortgage}\n
\n
\n Total Investment\n ${results.totalInvestment}\n
\n
\n 5-Year Value\n ${results.futureValue}\n
\n
\n Cap Rate\n {results.capRate}%\n
\n
\n\n \n
\n \n )}\n
\n
\n
\n );\n}\n\nexport default ROICalculator;\n","\n// Configuration utility to access environment variables\nexport const config = {\n supabase: {\n url: import.meta.env.VITE_SUPABASE_URL || '',\n anonKey: import.meta.env.VITE_SUPABASE_ANON_KEY || '',\n },\n zillow: {\n apiKey: import.meta.env.VITE_ZILLOW_API_KEY || '',\n apiHost: import.meta.env.VITE_ZILLOW_API_HOST || 'zillow-com1.p.rapidapi.com',\n },\n stripe: {\n publishableKey: import.meta.env.VITE_STRIPE_PUBLISHABLE_KEY || '',\n },\n email: {\n host: import.meta.env.VITE_EMAIL_HOST || '',\n port: parseInt(import.meta.env.VITE_EMAIL_PORT || '465', 10),\n user: import.meta.env.VITE_EMAIL_USER || '',\n from: import.meta.env.VITE_EMAIL_FROM || '',\n },\n api: {\n url: import.meta.env.VITE_API_URL || window.location.origin,\n version: import.meta.env.VITE_API_VERSION || 'v1',\n },\n features: {\n analytics: import.meta.env.VITE_ENABLE_ANALYTICS === 'true',\n chat: import.meta.env.VITE_ENABLE_CHAT === 'true',\n notifications: import.meta.env.VITE_ENABLE_NOTIFICATIONS === 'true',\n },\n analytics: {\n gaTrackingId: import.meta.env.VITE_GA_TRACKING_ID || '',\n },\n app: {\n name: import.meta.env.VITE_APP_NAME || 'Property Analysis Pro',\n url: import.meta.env.VITE_APP_URL || window.location.origin,\n description: import.meta.env.VITE_APP_DESCRIPTION || 'Advanced property analysis and investment tools',\n version: import.meta.env.VITE_APP_VERSION || '1.0.0',\n },\n security: {\n rateLimit: parseInt(import.meta.env.VITE_API_RATE_LIMIT || '100', 10),\n rateWindow: parseInt(import.meta.env.VITE_API_RATE_WINDOW || '900000', 10),\n allowedOrigins: (import.meta.env.VITE_ALLOWED_ORIGINS || window.location.origin).split(','),\n },\n cache: {\n duration: parseInt(import.meta.env.VITE_CACHE_DURATION || '3600000', 10),\n maxSize: parseInt(import.meta.env.VITE_MAX_CACHE_SIZE || '100', 10),\n },\n openai: {\n apiKey: import.meta.env.VITE_OPENAI_API_KEY || '',\n model: import.meta.env.VITE_AI_MODEL || 'gpt-4',\n temperature: parseFloat(import.meta.env.VITE_AI_TEMPERATURE || '0.7'),\n maxTokens: parseInt(import.meta.env.VITE_AI_MAX_TOKENS || '500', 10),\n }\n};\n\n// Validate required environment variables\nconst requiredVars = [\n 'VITE_SUPABASE_URL',\n 'VITE_SUPABASE_ANON_KEY',\n 'VITE_ZILLOW_API_KEY',\n];\n\nconst missingVars = requiredVars.filter(varName => !import.meta.env[varName]);\n\nif (missingVars.length > 0) {\n console.warn('Missing required environment variables:', missingVars);\n}\n\nexport default config;\n","\nexport class PerformanceMonitor {\n constructor() {\n this.metrics = {};\n this.thresholds = {\n api: 1000, // 1 second\n render: 100, // 100ms\n interaction: 50 // 50ms\n };\n }\n\n startMeasurement(name) {\n if (typeof performance === 'undefined') return;\n performance.mark(`${name}-start`);\n }\n\n endMeasurement(name) {\n if (typeof performance === 'undefined') return;\n \n performance.mark(`${name}-end`);\n performance.measure(name, `${name}-start`, `${name}-end`);\n \n const measurements = performance.getEntriesByName(name);\n const latestMeasurement = measurements[measurements.length - 1];\n \n this.metrics[name] = latestMeasurement.duration;\n \n // Cleanup\n performance.clearMarks(`${name}-start`);\n performance.clearMarks(`${name}-end`);\n performance.clearMeasures(name);\n \n return latestMeasurement.duration;\n }\n\n getMetrics() {\n return this.metrics;\n }\n\n checkPerformance(name, duration) {\n const threshold = this.thresholds[name.split('-')[0]];\n if (threshold && duration > threshold) {\n console.warn(`Performance warning: ${name} took ${duration}ms (threshold: ${threshold}ms)`);\n return false;\n }\n return true;\n }\n}\n\nexport const performanceMonitor = new PerformanceMonitor();\n","\nexport class CacheManager {\n constructor() {\n this.cache = new Map();\n this.maxAge = 5 * 60 * 1000; // 5 minutes\n this.maxSize = 100; // Maximum number of cached items\n }\n\n get(key) {\n const item = this.cache.get(key);\n if (!item) return null;\n\n if (Date.now() - item.timestamp > this.maxAge) {\n this.cache.delete(key);\n return null;\n }\n\n return item.data;\n }\n\n set(key, data) {\n // Clear old entries if cache is full\n if (this.cache.size >= this.maxSize) {\n const oldestKey = Array.from(this.cache.entries())\n .sort(([, a], [, b]) => a.timestamp - b.timestamp)[0][0];\n this.cache.delete(oldestKey);\n }\n\n this.cache.set(key, {\n data,\n timestamp: Date.now()\n });\n }\n\n clear() {\n this.cache.clear();\n }\n\n // Remove expired items\n cleanup() {\n const now = Date.now();\n for (const [key, item] of this.cache.entries()) {\n if (now - item.timestamp > this.maxAge) {\n this.cache.delete(key);\n }\n }\n }\n}\n\nexport const cacheManager = new CacheManager();\n\n// Run cleanup every minute\nsetInterval(() => cacheManager.cleanup(), 60000);\n","\nimport { config } from './config';\nimport { performanceMonitor } from './performance-monitor';\nimport { cacheManager } from './cache-manager';\n\nexport const ZillowAPI = {\n async getDetailedMarketMetrics(location) {\n try {\n const cacheKey = `market-metrics-${location}`;\n const cachedData = cacheManager.get(cacheKey);\n\n if (cachedData) {\n return cachedData;\n }\n\n performanceMonitor.startMeasurement('zillow-api-call');\n\n const response = await fetch(`https://zillow-com1.p.rapidapi.com/propertyExtendedSearch?location=${encodeURIComponent(location)}&home_type=Houses`, {\n method: 'GET',\n headers: {\n 'X-RapidAPI-Key': config.zillow.apiKey,\n 'X-RapidAPI-Host': config.zillow.apiHost\n }\n });\n\n if (!response.ok) {\n throw new Error('Failed to fetch market data');\n }\n\n const data = await response.json();\n const processedData = this.processMarketData(data);\n \n performanceMonitor.endMeasurement('zillow-api-call');\n \n cacheManager.set(cacheKey, processedData);\n return processedData;\n } catch (error) {\n console.error('Error fetching market data:', error);\n throw error;\n }\n },\n\n processMarketData(rawData) {\n const properties = rawData.props || [];\n const prices = properties.map(p => p.price).filter(Boolean);\n const sqftPrices = properties\n .filter(p => p.price && p.sqft)\n .map(p => p.price / p.sqft);\n\n return {\n pricing: {\n median: this.calculateMedian(prices),\n mean: this.calculateMean(prices),\n pricePerSqft: {\n median: this.calculateMedian(sqftPrices),\n mean: this.calculateMean(sqftPrices)\n },\n range: {\n min: Math.min(...prices),\n max: Math.max(...prices)\n },\n distribution: this.calculatePriceDistribution(prices),\n trends: this.calculatePriceTrends(properties)\n },\n inventory: {\n total: properties.length,\n byType: this.groupByPropertyType(properties),\n byPrice: this.groupByPriceRange(properties),\n byBeds: this.groupByBedrooms(properties),\n daysOnMarket: this.calculateAverageDaysOnMarket(properties)\n },\n market: {\n score: this.calculateMarketScore(properties),\n competitiveness: this.calculateCompetitiveness(properties),\n priceReductions: this.calculatePriceReductions(properties),\n absorption: this.calculateAbsorptionRate(properties)\n },\n investment: {\n roi: this.calculateROI(properties),\n capRate: this.calculateCapRate(properties),\n cashFlow: this.calculateCashFlow(properties),\n appreciation: this.calculateAppreciation(properties)\n }\n };\n },\n\n // ... (rest of the ZillowAPI methods)\n};\n","\nimport React, { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { Input } from \"@/components/ui/input\";\nimport { Button } from \"@/components/ui/button\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { Search, Home, DollarSign, Plus } from \"lucide-react\";\nimport { ZillowAPI } from \"@/lib/zillow-api\";\nimport { propertyService } from \"@/lib/supabase\";\nimport { useAuth } from \"../contexts/AuthContext\";\n\nfunction PropertySearch({ onPropertySelect }) {\n const [searchTerm, setSearchTerm] = useState(\"\");\n const [results, setResults] = useState([]);\n const [loading, setLoading] = useState(false);\n const [showManualInput, setShowManualInput] = useState(false);\n const [manualProperty, setManualProperty] = useState({\n address: \"\",\n city: \"\",\n state: \"\",\n zipcode: \"\",\n price: \"\",\n beds: \"\",\n baths: \"\",\n sqft: \"\",\n yearBuilt: \"\",\n propertyType: \"Single Family\"\n });\n const { toast } = useToast();\n const { user } = useAuth();\n\n const handleSearch = async () => {\n if (searchTerm.length < 3) {\n toast({\n title: \"Search Error\",\n description: \"Please enter at least 3 characters\",\n variant: \"destructive\"\n });\n return;\n }\n\n setLoading(true);\n try {\n console.log('Searching for:', searchTerm);\n const data = await ZillowAPI.searchProperties(searchTerm);\n console.log('Search results:', data);\n\n if (data && data.props) {\n const formattedResults = data.props.map(prop => ({\n zpid: prop.zpid,\n address: prop.address?.streetAddress || prop.address,\n city: prop.address?.city || prop.city,\n state: prop.address?.state || prop.state,\n zipcode: prop.address?.zipcode || prop.zipcode,\n fullAddress: prop.address?.streetAddress ? \n `${prop.address.streetAddress}, ${prop.address.city}, ${prop.address.state} ${prop.address.zipcode}` :\n `${prop.address}, ${prop.city}, ${prop.state} ${prop.zipcode}`,\n price: prop.price,\n beds: prop.bedrooms || prop.beds,\n baths: prop.bathrooms || prop.baths,\n sqft: prop.livingArea || prop.sqft,\n imgSrc: prop.imgSrc,\n propertyType: prop.homeType || prop.propertyType,\n yearBuilt: prop.yearBuilt\n }));\n\n // Save search results to Supabase if user is logged in\n if (user) {\n await propertyService.saveSearchResults(user.id, formattedResults);\n }\n\n setResults(formattedResults);\n \n if (formattedResults.length > 0) {\n toast({\n title: \"Properties Found\",\n description: `Found ${formattedResults.length} properties`,\n });\n } else {\n toast({\n title: \"No Results\",\n description: \"No properties found. Try manual entry.\",\n });\n }\n }\n } catch (error) {\n console.error(\"Search error:\", error);\n toast({\n title: \"Search Error\",\n description: \"Failed to search properties. Try manual entry.\",\n variant: \"destructive\"\n });\n setResults([]);\n } finally {\n setLoading(false);\n }\n };\n\n const handleInputChange = (e) => {\n setSearchTerm(e.target.value);\n };\n\n const handleKeyPress = (e) => {\n if (e.key === 'Enter') {\n handleSearch();\n }\n };\n\n const handlePropertySelect = (property) => {\n onPropertySelect(property);\n setSearchTerm(\"\");\n setResults([]);\n };\n\n const handleManualSubmit = (e) => {\n e.preventDefault();\n const manualPropertyData = {\n ...manualProperty,\n isManualEntry: true,\n zpid: `manual-${Date.now()}`,\n fullAddress: `${manualProperty.address}, ${manualProperty.city}, ${manualProperty.state} ${manualProperty.zipcode}`\n };\n onPropertySelect(manualPropertyData);\n setShowManualInput(false);\n setManualProperty({\n address: \"\",\n city: \"\",\n state: \"\",\n zipcode: \"\",\n price: \"\",\n beds: \"\",\n baths: \"\",\n sqft: \"\",\n yearBuilt: \"\",\n propertyType: \"Single Family\"\n });\n };\n\n return (\n
\n
\n
\n \n \n
\n \n {loading ? (\n
\n ) : (\n \"Search\"\n )}\n \n setShowManualInput(!showManualInput)}\n className=\"whitespace-nowrap\"\n >\n \n Manual Entry\n \n
\n\n {/* Rest of the component remains the same */}\n
\n );\n}\n\nexport default PropertySearch;\n","\nimport React from \"react\";\nimport { motion } from \"framer-motion\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport {\n Building,\n DollarSign,\n TrendingUp,\n Home,\n} from \"lucide-react\";\n\nfunction AnalysisResults({ propertyData }) {\n const { toast } = useToast();\n\n // Calculate estimated monthly rent (using a simple calculation method)\n const calculateEstimatedRent = () => {\n if (!propertyData?.price) return 0;\n // Using the 1% rule as a baseline\n const baseRent = propertyData.price * 0.01;\n // Adjust based on property type and size\n let adjustmentFactor = 1;\n if (propertyData.sqft > 2000) adjustmentFactor *= 0.9;\n if (propertyData.propertyType?.toLowerCase().includes('luxury')) adjustmentFactor *= 1.2;\n return Math.round(baseRent * adjustmentFactor);\n };\n\n // Calculate estimated property value in 5 years (assuming 3% annual appreciation)\n const calculateFutureValue = () => {\n if (!propertyData?.price) return 0;\n const annualAppreciation = 0.03; // 3% annual appreciation\n return Math.round(propertyData.price * Math.pow(1 + annualAppreciation, 5));\n };\n\n // Calculate estimated property taxes\n const calculatePropertyTax = () => {\n if (!propertyData?.price) return 0;\n // Using average property tax rate of 1.1%\n return Math.round(propertyData.price * 0.011);\n };\n\n return (\n
\n

\n Quick Analysis\n

\n\n
\n {/* Estimated Monthly Rent */}\n \n
\n

\n Est. Monthly Rent\n

\n \n
\n

\n ${calculateEstimatedRent().toLocaleString()}\n

\n \n\n {/* Property Value */}\n \n
\n

\n Current Value\n

\n \n
\n

\n ${propertyData?.price?.toLocaleString() || '0'}\n

\n \n\n {/* 5-Year Value Projection */}\n \n
\n

\n 5-Year Projection\n

\n \n
\n

\n ${calculateFutureValue().toLocaleString()}\n

\n \n\n {/* Property Details */}\n \n
\n

\n Property Details\n

\n \n
\n
\n

\n {propertyData?.beds} beds • {propertyData?.baths} baths\n

\n

\n {propertyData?.sqft?.toLocaleString()} sqft\n

\n
\n \n
\n\n {/* Additional Property Insights */}\n
\n
\n

Property Insights

\n
    \n
  • • Est. Property Tax: ${calculatePropertyTax().toLocaleString()}/year
  • \n
  • • Property Type: {propertyData?.propertyType || 'N/A'}
  • \n
  • • Year Built: {propertyData?.yearBuilt || 'N/A'}
  • \n
  • • Price per Sqft: ${Math.round(propertyData?.price / propertyData?.sqft).toLocaleString()}
  • \n
\n
\n\n
\n

Location Details

\n
    \n
  • • Neighborhood: {propertyData?.address?.neighborhood || 'N/A'}
  • \n
  • • City: {propertyData?.address?.city || 'N/A'}
  • \n
  • • State: {propertyData?.address?.state || 'N/A'}
  • \n
  • • ZIP Code: {propertyData?.address?.zipcode || 'N/A'}
  • \n
\n
\n
\n
\n );\n}\n\nexport default AnalysisResults;\n","\"use client\";\n\n// packages/react/progress/src/progress.tsx\nimport * as React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PROGRESS_NAME = \"Progress\";\nvar DEFAULT_MAX = 100;\nvar [createProgressContext, createProgressScope] = createContextScope(PROGRESS_NAME);\nvar [ProgressProvider, useProgressContext] = createProgressContext(PROGRESS_NAME);\nvar Progress = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeProgress,\n value: valueProp = null,\n max: maxProp,\n getValueLabel = defaultGetValueLabel,\n ...progressProps\n } = props;\n if ((maxProp || maxProp === 0) && !isValidMaxNumber(maxProp)) {\n console.error(getInvalidMaxError(`${maxProp}`, \"Progress\"));\n }\n const max = isValidMaxNumber(maxProp) ? maxProp : DEFAULT_MAX;\n if (valueProp !== null && !isValidValueNumber(valueProp, max)) {\n console.error(getInvalidValueError(`${valueProp}`, \"Progress\"));\n }\n const value = isValidValueNumber(valueProp, max) ? valueProp : null;\n const valueLabel = isNumber(value) ? getValueLabel(value, max) : void 0;\n return /* @__PURE__ */ jsx(ProgressProvider, { scope: __scopeProgress, value, max, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"aria-valuemax\": max,\n \"aria-valuemin\": 0,\n \"aria-valuenow\": isNumber(value) ? value : void 0,\n \"aria-valuetext\": valueLabel,\n role: \"progressbar\",\n \"data-state\": getProgressState(value, max),\n \"data-value\": value ?? void 0,\n \"data-max\": max,\n ...progressProps,\n ref: forwardedRef\n }\n ) });\n }\n);\nProgress.displayName = PROGRESS_NAME;\nvar INDICATOR_NAME = \"ProgressIndicator\";\nvar ProgressIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeProgress, ...indicatorProps } = props;\n const context = useProgressContext(INDICATOR_NAME, __scopeProgress);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getProgressState(context.value, context.max),\n \"data-value\": context.value ?? void 0,\n \"data-max\": context.max,\n ...indicatorProps,\n ref: forwardedRef\n }\n );\n }\n);\nProgressIndicator.displayName = INDICATOR_NAME;\nfunction defaultGetValueLabel(value, max) {\n return `${Math.round(value / max * 100)}%`;\n}\nfunction getProgressState(value, maxValue) {\n return value == null ? \"indeterminate\" : value === maxValue ? \"complete\" : \"loading\";\n}\nfunction isNumber(value) {\n return typeof value === \"number\";\n}\nfunction isValidMaxNumber(max) {\n return isNumber(max) && !isNaN(max) && max > 0;\n}\nfunction isValidValueNumber(value, max) {\n return isNumber(value) && !isNaN(value) && value <= max && value >= 0;\n}\nfunction getInvalidMaxError(propValue, componentName) {\n return `Invalid prop \\`max\\` of value \\`${propValue}\\` supplied to \\`${componentName}\\`. Only numbers greater than 0 are valid max values. Defaulting to \\`${DEFAULT_MAX}\\`.`;\n}\nfunction getInvalidValueError(propValue, componentName) {\n return `Invalid prop \\`value\\` of value \\`${propValue}\\` supplied to \\`${componentName}\\`. The \\`value\\` prop must be:\n - a positive number\n - less than the value passed to \\`max\\` (or ${DEFAULT_MAX} if no \\`max\\` prop is set)\n - \\`null\\` or \\`undefined\\` if the progress is indeterminate.\n\nDefaulting to \\`null\\`.`;\n}\nvar Root = Progress;\nvar Indicator = ProgressIndicator;\nexport {\n Indicator,\n Progress,\n ProgressIndicator,\n Root,\n createProgressScope\n};\n//# sourceMappingURL=index.mjs.map\n","\nimport React from \"react\";\nimport * as ProgressPrimitive from \"@radix-ui/react-progress\";\nimport { cn } from \"@/lib/utils\";\n\nconst Progress = React.forwardRef(({ className, value, ...props }, ref) => (\n \n \n \n));\n\nProgress.displayName = ProgressPrimitive.Root.displayName;\n\nexport { Progress };\n","\nimport React, { useEffect, useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { useProperty } from \"../contexts/PropertyContext\";\nimport { ZillowAPI } from \"@/lib/zillow-api\";\nimport { Progress } from \"@/components/ui/progress\";\nimport {\n AlertTriangle,\n TrendingUp,\n DollarSign,\n Building,\n Shield,\n Users,\n Home,\n Map,\n} from \"lucide-react\";\n\nfunction RiskAssessment({ propertyData }) {\n const [marketTrends, setMarketTrends] = useState(null);\n const [riskScore, setRiskScore] = useState(null);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (propertyData?.address) {\n analyzeRisk();\n }\n }, [propertyData]);\n\n const analyzeRisk = async () => {\n try {\n const trends = await ZillowAPI.getMarketTrends(propertyData.address);\n setMarketTrends(trends);\n \n // Calculate comprehensive risk score\n const score = calculateRiskScore(propertyData, trends);\n setRiskScore(score);\n } catch (error) {\n console.error('Risk analysis error:', error);\n } finally {\n setLoading(false);\n }\n };\n\n const calculateRiskScore = (property, trends) => {\n const scores = {\n marketRisk: calculateMarketRisk(trends),\n financialRisk: calculateFinancialRisk(property),\n propertyRisk: calculatePropertyRisk(property),\n locationRisk: calculateLocationRisk(trends),\n };\n\n return {\n total: Math.round(\n (scores.marketRisk + scores.financialRisk + scores.propertyRisk + scores.locationRisk) / 4\n ),\n categories: scores,\n };\n };\n\n const calculateMarketRisk = (trends) => {\n // Market risk calculation logic\n return 75; // Example score\n };\n\n const calculateFinancialRisk = (property) => {\n // Financial risk calculation logic\n return 85; // Example score\n };\n\n const calculatePropertyRisk = (property) => {\n // Property risk calculation logic\n return 90; // Example score\n };\n\n const calculateLocationRisk = (trends) => {\n // Location risk calculation logic\n return 80; // Example score\n };\n\n if (loading) {\n return (\n
\n
\n
\n );\n }\n\n return (\n
\n {/* Overall Risk Score */}\n \n
\n

Risk Assessment

\n \n
\n\n
\n {/* Risk Score Gauge */}\n
\n
\n \n \n 80\n ? \"text-green-500\"\n : riskScore?.total > 60\n ? \"text-yellow-500\"\n : \"text-red-500\"\n }`}\n strokeWidth=\"12\"\n strokeDasharray={565.48}\n strokeDashoffset={565.48 * (1 - (riskScore?.total || 0) / 100)}\n strokeLinecap=\"round\"\n stroke=\"currentColor\"\n fill=\"transparent\"\n r=\"90\"\n cx=\"96\"\n cy=\"96\"\n />\n \n
\n {riskScore?.total || 0}\n Risk Score\n
\n
\n
\n\n {/* Risk Categories */}\n
\n
\n
\n Market Risk\n {riskScore?.categories.marketRisk}%\n
\n \n
\n\n
\n
\n Financial Risk\n {riskScore?.categories.financialRisk}%\n
\n \n
\n\n
\n
\n Property Risk\n {riskScore?.categories.propertyRisk}%\n
\n \n
\n\n
\n
\n Location Risk\n {riskScore?.categories.locationRisk}%\n
\n \n
\n
\n
\n \n\n {/* Risk Factors */}\n \n {/* Market Conditions */}\n
\n
\n \n

Market Conditions

\n
\n
\n
\n Price Trend\n +5.2%\n
\n
\n Days on Market\n 28 days\n
\n
\n Inventory Level\n Low\n
\n
\n
\n\n {/* Financial Analysis */}\n
\n
\n \n

Financial Analysis

\n
\n
\n
\n Price to Rent Ratio\n 15.2\n
\n
\n Cap Rate\n 6.8%\n
\n
\n Cash Flow Potential\n Strong\n
\n
\n
\n\n {/* Property Characteristics */}\n
\n
\n \n

Property Characteristics

\n
\n
\n
\n Property Age\n {new Date().getFullYear() - propertyData.yearBuilt} years\n
\n
\n Property Type\n {propertyData.propertyType}\n
\n
\n Condition\n Good\n
\n
\n
\n\n {/* Location Analysis */}\n
\n
\n \n

Location Analysis

\n
\n
\n
\n Neighborhood Rating\n A-\n
\n
\n Crime Rate\n Low\n
\n
\n School Rating\n 8/10\n
\n
\n
\n \n\n {/* Risk Recommendations */}\n \n

Risk Mitigation Recommendations

\n
\n
\n \n
\n

Market Timing

\n

\n Consider waiting 2-3 months for potential market correction based on current trends.\n

\n
\n
\n\n
\n \n
\n

Insurance Coverage

\n

\n Recommend comprehensive coverage due to property age and location characteristics.\n

\n
\n
\n\n
\n \n
\n

Property Improvements

\n

\n Consider updating HVAC system to improve property value and reduce maintenance risk.\n

\n
\n
\n
\n \n
\n );\n}\n\nexport default RiskAssessment;\n","\nimport React, { useState } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { useAuth } from \"../contexts/AuthContext\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { Button } from \"@/components/ui/button\";\nimport PropertySearch from \"./PropertySearch\";\nimport AnalysisResults from \"./AnalysisResults\";\nimport RiskAssessment from \"./RiskAssessment\";\nimport AIAnalysis from \"./AIAnalysis\";\nimport { ZillowAPI } from \"@/lib/zillow-api\";\nimport { X, Download, Share2, Save } from \"lucide-react\";\nimport { createCheckoutSession } from \"@/lib/stripe\";\nimport { usageTracker } from \"@/lib/stripe\";\n\nfunction PropertyAnalysis() {\n const [propertyData, setPropertyData] = useState(null);\n const [selectedProperty, setSelectedProperty] = useState(null);\n const [marketData, setMarketData] = useState(null);\n const [loading, setLoading] = useState(false);\n const { user } = useAuth();\n const { toast } = useToast();\n\n const formatAddress = (property) => {\n if (!property) return '';\n \n if (typeof property.address === 'object') {\n const { streetAddress, city, state, zipcode } = property.address;\n return `${streetAddress || ''}, ${city || ''}, ${state || ''} ${zipcode || ''}`.trim();\n }\n \n return property.address || '';\n };\n\n const handlePropertySelect = async (property) => {\n setLoading(true);\n try {\n // Check usage limits\n const { allowed, reason } = await usageTracker.checkUsage(user.id, 'analyses');\n \n if (!allowed) {\n // If user has reached their limit, prompt for upgrade\n toast({\n title: \"Usage Limit Reached\",\n description: \"Please upgrade your plan to continue analyzing properties.\",\n variant: \"destructive\",\n });\n \n // Start checkout session for upgrade\n await createCheckoutSession('prod_RywB8iOsaR7LHg', user.id);\n return;\n }\n\n // Get property details\n const propertyDetails = await ZillowAPI.getPropertyDetails(property.zpid);\n console.log(\"Property details:\", propertyDetails);\n\n // Get market trends\n const marketTrends = await ZillowAPI.getMarketTrends(formatAddress(property));\n console.log(\"Market trends:\", marketTrends);\n \n setSelectedProperty({\n ...property,\n ...propertyDetails,\n formattedAddress: formatAddress(property)\n });\n setMarketData(marketTrends);\n \n // Track usage\n await usageTracker.trackUsage(user.id, 'analyses');\n \n toast({\n title: \"Property Selected\",\n description: \"Analysis is being generated...\",\n });\n } catch (error) {\n console.error('Error loading property details:', error);\n toast({\n title: \"Error\",\n description: \"Failed to load property details. Please try again.\",\n variant: \"destructive\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n const handleSaveAnalysis = async () => {\n if (!user) {\n // If user is not logged in, start checkout session\n try {\n await createCheckoutSession('prod_Ryw8urKRnLcpVy', null);\n } catch (error) {\n console.error('Checkout error:', error);\n toast({\n title: \"Error\",\n description: \"Failed to start checkout process\",\n variant: \"destructive\",\n });\n }\n return;\n }\n\n try {\n // Save to Supabase\n const { data, error } = await supabase\n .from('analyses')\n .insert([\n {\n user_id: user.id,\n property_data: selectedProperty,\n market_data: marketData,\n created_at: new Date().toISOString()\n }\n ])\n .select()\n .single();\n\n if (error) throw error;\n\n toast({\n title: \"Analysis Saved\",\n description: \"Your analysis has been saved successfully\",\n });\n } catch (error) {\n console.error('Error saving analysis:', error);\n toast({\n title: \"Error\",\n description: \"Failed to save analysis\",\n variant: \"destructive\"\n });\n }\n };\n\n const handleDownloadPDF = async () => {\n // Check if user has pro plan\n if (!user?.subscription?.plan === 'pro') {\n try {\n // Start checkout session for pro plan\n await createCheckoutSession('prod_RywB8iOsaR7LHg', user?.id);\n } catch (error) {\n console.error('Checkout error:', error);\n toast({\n title: \"Error\",\n description: \"Failed to start checkout process\",\n variant: \"destructive\",\n });\n }\n return;\n }\n\n try {\n // Generate PDF report\n const reportData = {\n property: selectedProperty,\n market: marketData,\n analysis: {\n roi: calculateROI(),\n cashFlow: calculateCashFlow(),\n metrics: calculateMetrics()\n }\n };\n\n const pdfBlob = await generatePDFReport(reportData);\n \n // Create download link\n const url = window.URL.createObjectURL(pdfBlob);\n const link = document.createElement('a');\n link.href = url;\n link.setAttribute('download', `property-analysis-${Date.now()}.pdf`);\n document.body.appendChild(link);\n link.click();\n link.remove();\n window.URL.revokeObjectURL(url);\n\n toast({\n title: \"Report Downloaded\",\n description: \"Your analysis report has been downloaded\",\n });\n } catch (error) {\n console.error('Error generating PDF:', error);\n toast({\n title: \"Error\",\n description: \"Failed to generate PDF report\",\n variant: \"destructive\"\n });\n }\n };\n\n // ... rest of the component code remains the same ...\n\n return (\n
\n {/* ... existing JSX ... */}\n
\n );\n}\n\nexport default PropertyAnalysis;\n","\nimport React from \"react\";\nimport { motion } from \"framer-motion\";\nimport { useNavigate } from \"react-router-dom\";\nimport { Button } from \"@/components/ui/button\";\nimport { ArrowLeft } from \"lucide-react\";\nimport ROICalculator from \"../components/calculator/ROICalculator\";\nimport PropertyAnalysis from \"../components/PropertyAnalysis\";\nimport AnalysisResults from \"../components/AnalysisResults\";\nimport RiskAssessment from \"../components/RiskAssessment\";\n\nfunction AnalysisTool() {\n const navigate = useNavigate();\n\n return (\n
\n \n
\n
\n navigate(\"/\")}\n className=\"mr-4\"\n >\n \n Back to Home\n \n

\n Property Analysis Tool\n

\n
\n
\n \n\n
\n
\n \n \n \n \n
\n
\n
\n );\n}\n\nexport default AnalysisTool;\n","\nimport React from \"react\";\n\nfunction LoadingSpinner() {\n return (\n
\n
\n
\n );\n}\n\nexport default LoadingSpinner;\n","\nimport React, { useState, useEffect } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { useNavigate } from \"react-router-dom\";\nimport { Button } from \"@/components/ui/button\";\nimport { useAuth } from \"@/contexts/AuthContext\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport LoadingSpinner from \"../LoadingSpinner\";\nimport {\n BarChart,\n TrendingUp,\n Building,\n DollarSign,\n Plus,\n ArrowLeftRight,\n Search,\n FileText,\n PieChart,\n} from \"lucide-react\";\n\nfunction Dashboard() {\n const navigate = useNavigate();\n const { user } = useAuth();\n const { toast } = useToast();\n const [subscription, setSubscription] = useState(null);\n const [properties, setProperties] = useState([]);\n const [analyses, setAnalyses] = useState([]);\n const [loading, setLoading] = useState(true);\n\n useEffect(() => {\n if (user) {\n fetchUserData();\n }\n }, [user]);\n\n const fetchUserData = async () => {\n try {\n setLoading(true);\n // Fetch subscription\n const { data: subData } = await supabase\n .from('subscriptions')\n .select('*')\n .eq('user_id', user.id)\n .single();\n setSubscription(subData);\n\n // Fetch properties\n const { data: propData } = await supabase\n .from('properties')\n .select('*')\n .eq('user_id', user.id);\n setProperties(propData || []);\n\n // Fetch analyses\n const { data: analysisData } = await supabase\n .from('analyses')\n .select('*')\n .eq('user_id', user.id);\n setAnalyses(analysisData || []);\n\n } catch (error) {\n console.error('Error fetching user data:', error);\n toast({\n title: \"Error\",\n description: \"Failed to load dashboard data\",\n variant: \"destructive\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n if (loading) {\n return ;\n }\n\n return (\n
\n {/* Portfolio Overview */}\n
\n
\n

Portfolio Overview

\n
\n \n
\n

Total Value

\n \n
\n

\n ${properties.reduce((sum, prop) => sum + (prop.price || 0), 0).toLocaleString()}\n

\n

+15% from last month

\n \n\n \n
\n

Monthly Income

\n \n
\n

\n ${properties.reduce((sum, prop) => sum + (prop.monthlyRent || 0), 0).toLocaleString()}\n

\n

+8% from last month

\n \n\n \n
\n

Properties

\n \n
\n

\n {properties.length}\n

\n

Active properties

\n \n\n \n
\n

Average ROI

\n \n
\n

\n {properties.length > 0\n ? (properties.reduce((sum, prop) => sum + (prop.roi || 0), 0) / properties.length).toFixed(1)\n : 0}%\n

\n

Portfolio performance

\n \n
\n
\n
\n\n {/* Quick Actions */}\n
\n navigate('/analyze')}\n >\n \n

New Analysis

\n

\n Analyze a new property\n

\n \n\n navigate('/market-analysis')}\n >\n \n

Market Research

\n

\n Research market trends\n

\n \n\n navigate('/compare')}\n >\n \n

Compare Properties

\n

\n Compare multiple properties\n

\n \n
\n\n {/* Recent Analyses */}\n
\n

Recent Analyses

\n {analyses.length > 0 ? (\n
\n {analyses.slice(0, 5).map((analysis) => (\n \n
\n

{analysis.property_address}

\n

\n {new Date(analysis.created_at).toLocaleDateString()}\n

\n
\n navigate(`/analysis/${analysis.id}`)}\n >\n View Details\n \n \n ))}\n
\n ) : (\n

No analyses yet

\n )}\n
\n\n {/* Properties Overview */}\n
\n

Properties Overview

\n {properties.length > 0 ? (\n
\n {properties.map((property) => (\n \n
\n

{property.address}

\n

\n ${property.purchase_price?.toLocaleString()}\n

\n
\n navigate(`/property/${property.id}`)}\n >\n Manage\n \n \n ))}\n
\n ) : (\n

No properties added yet

\n )}\n
\n
\n );\n}\n\nexport default Dashboard;\n","\nimport { config } from './config';\nimport { performanceMonitor } from './performance-monitor';\nimport { cacheManager } from './cache-manager';\n\nexport const chatGPT = {\n async getMarketInsights(location, marketData) {\n try {\n const cacheKey = `market-insights-${location}`;\n const cachedData = cacheManager.get(cacheKey);\n\n if (cachedData) {\n return cachedData;\n }\n\n performanceMonitor.startMeasurement('chatgpt-api-call');\n\n const prompt = `\n As a real estate market expert, analyze the following market data for ${location}:\n ${JSON.stringify(marketData)}\n\n Please provide a comprehensive analysis including:\n 1. Market Overview\n 2. Investment Opportunities\n 3. Risk Factors\n 4. Recommendations\n `;\n\n const response = await fetch('https://api.openai.com/v1/chat/completions', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Authorization': `Bearer ${config.openai.apiKey}`\n },\n body: JSON.stringify({\n model: config.openai.model,\n messages: [\n {\n role: \"system\",\n content: \"You are an expert real estate market analyst providing detailed market insights.\"\n },\n {\n role: \"user\",\n content: prompt\n }\n ],\n temperature: config.openai.temperature,\n max_tokens: config.openai.maxTokens\n })\n });\n\n if (!response.ok) {\n throw new Error('Failed to get AI insights');\n }\n\n const result = await response.json();\n const insights = result.choices[0].message.content;\n\n performanceMonitor.endMeasurement('chatgpt-api-call');\n\n cacheManager.set(cacheKey, insights);\n return insights;\n\n } catch (error) {\n console.error('ChatGPT API Error:', error);\n throw error;\n }\n },\n\n // ... (other ChatGPT methods)\n};\n","/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/*!\n * Chart.js v4.4.8\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n let id = 0;\n return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n return value === null || value === undefined;\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */ function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for(i = len - 1; i >= 0; i--){\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for(i = 0, ilen = a0.length; i < ilen; ++i){\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n if (isArray(source)) {\n return source.map(clone);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for(; k < klen; ++k){\n target[keys[k]] = clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return [\n '__proto__',\n 'prototype',\n 'constructor'\n ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [\n source\n ];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for(let i = 0; i < ilen; ++i){\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n const keys = Object.keys(current);\n for(let k = 0, klen = keys.length; k < klen; ++k){\n merger(keys[k], target, current, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': (v)=>v,\n // default resolvers\n x: (o)=>o.x,\n y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts){\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return (obj)=>{\n for (const k of keys){\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a){\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for(i = 1; i < sqrt; i++){\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b)=>a - b).pop();\n return result;\n}\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */ function isNonPrimitive(n) {\n return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);\n}\nfunction isNumber(n) {\n return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for(i = 0, ilen = array.length; i < ilen; i++){\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while(Math.round(x * e) / e !== x){\n e *= 10;\n p++;\n }\n return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < -0.5 * PI) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index)=>table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while(hi - lo > 1){\n mid = lo + hi >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {\n lo,\n hi\n };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while(start < end && values[start] < min){\n start++;\n }\n while(end > start && values[end - 1] > max){\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n 'push',\n 'pop',\n 'shift',\n 'splice',\n 'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [\n listener\n ]\n }\n });\n arrayEvents.forEach((key)=>{\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value (...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object)=>{\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key)=>{\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n const set = new Set(items);\n if (set.size === items.length) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function(...args) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, ()=>{\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const { iScale , vScale , _parsed } = meta;\n const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n const axis = iScale.axis;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = Math.min(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n if (spanGaps) {\n const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n start -= Math.max(0, distanceToDefinedLo);\n }\n start = _limitValue(start, 0, pointCount - 1);\n }\n if (maxDefined) {\n let end = Math.max(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n if (spanGaps) {\n const distanceToDefinedHi = _parsed.slice(end - 1).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n end += Math.max(0, distanceToDefinedHi);\n }\n count = _limitValue(end, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n const { xScale , yScale , _scaleRanges } = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n linear: (t)=>t,\n easeInQuad: (t)=>t * t,\n easeOutQuad: (t)=>-t * (t - 2),\n easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: (t)=>t * t * t,\n easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: (t)=>t * t * t * t,\n easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: (t)=>t * t * t * t * t,\n easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n easeOutSine: (t)=>Math.sin(t * HALF_PI),\n easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic (t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack (t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack (t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack (t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n easeOutBounce (t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < 1 / d) {\n return m * t * t;\n }\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n 'x',\n 'y',\n 'borderWidth',\n 'radius',\n 'tension'\n];\nconst colors = [\n 'color',\n 'borderColor',\n 'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n });\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n });\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n });\n defaults.describe('animations', {\n _fallback: 'animation'\n });\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: (v)=>v | 0\n }\n }\n }\n });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n return isArray(value) ? value : '' + value;\n },\n numeric (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n if ([\n 1,\n 2,\n 3,\n 5,\n 10,\n 15\n ].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n var Ticks = {\n formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n clip: true,\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options)=>options.lineWidth,\n tickColor: (_ctx, options)=>options.color,\n offset: false\n },\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n });\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n });\n defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name)=>name !== 'backdropPadding'\n });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for(let i = 0, n = keys.length; i < n; ++i){\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n constructor(_descriptors, _appliers){\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get () {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set (value) {\n this[privateName] = value;\n }\n }\n });\n }\n apply(appliers) {\n appliers.forEach((apply)=>apply(this));\n }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n _scriptable: (name)=>!name.startsWith('on'),\n _indexable: (name)=>name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n}, [\n applyAnimationsDefaults,\n applyLayoutsDefaults,\n applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for(i = 0; i < ilen; i++){\n thing = arrayOfThings[i];\n // Undefined strings and arrays should not be measured\n if (thing !== undefined && thing !== null && !isArray(thing)) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n // if it is an array lets measure each element\n // to do maybe simplify this function a bit so we can do this more recursively?\n for(j = 0, jlen = thing.length; j < jlen; j++){\n nestedThing = thing[j];\n // Undefined strings and arrays should not be measured\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for(i = 0; i < gcLen; i++){\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n if (!ctx && !canvas) {\n return;\n }\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n // canvas.width and canvas.height do not consider the canvas transform,\n // while clearRect does\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch(style){\n // Default includes circle\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n // NOTE: the rounded rect implementation changed to use `arc` instead of\n // `quadraticCurveTo` since it generates better results when rect is\n // almost a circle. 0.516 (instead of 0.5) produces results with visually\n // closer proportion to the previous impl and it is inscribed in the\n // circle with `radius`. For more details, see the following PRs:\n // https://github.com/chartjs/Chart.js/issues/5597\n // https://github.com/chartjs/Chart.js/issues/5858\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n /* falls through */ case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n /* falls through */ case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n margin = margin || 0.5; // margin - default is to match rounded decimals\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n /**\n * Now that IE11 support has been dropped, we can use more\n * of the TextMetrics object. The actual bounding boxes\n * are unflagged in Chrome, Firefox, Edge, and Safari so they\n * can be safely used.\n * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n */ const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [\n text\n ];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for(i = 0; i < lines.length; ++i){\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += Number(font.lineHeight);\n }\n ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n const { x , y , w , h , radius } = rect;\n // top left arc\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n // line from top left to bottom left\n ctx.lineTo(x, y + h - radius.bottomLeft);\n // bottom left arc\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n // line from bottom left to bottom right\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n // bottom right arc\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n // line from bottom right to top right\n ctx.lineTo(x + w, y + radius.topRight);\n // top right arc\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n // line from top right to top left\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch(matches[3]){\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n for (const prop of keys){\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n return _readValueToProps(value, [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight'\n ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for(i = 0, ilen = inputs.length; i < ilen; ++i){\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n const { min , max } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n const finalRootScopes = rootScopes || scopes;\n if (typeof fallback === 'undefined') {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: finalRootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope)=>_createResolver([\n scope,\n ...scopes\n ], prefixes, finalRootScopes, fallback)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete target._keys; // remove cached keys\n delete scopes[0][prop]; // remove from top level scope\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop) {\n return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys (target) {\n return getKeysFromAllScopes(target);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value; // set to top level scope + cache\n delete target._keys; // remove cached keys\n return true;\n }\n });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n /**\n * A trap for the delete operator.\n */ deleteProperty (target, prop) {\n delete target[prop]; // remove from cache\n delete proxy[prop]; // remove from proxy\n return true;\n },\n /**\n * A trap for getting property values.\n */ get (target, prop, receiver) {\n return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n },\n /**\n * A trap for Object.getOwnPropertyDescriptor.\n * Also used by Object.hasOwnProperty.\n */ getOwnPropertyDescriptor (target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n /**\n * A trap for Object.getPrototypeOf.\n */ getPrototypeOf () {\n return Reflect.getPrototypeOf(proxy);\n },\n /**\n * A trap for the in operator.\n */ has (target, prop) {\n return Reflect.has(proxy, prop);\n },\n /**\n * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n */ ownKeys () {\n return Reflect.ownKeys(proxy);\n },\n /**\n * A trap for setting property values.\n */ set (target, prop, value) {\n proxy[prop] = value; // set to proxy\n delete target[prop]; // remove from cache\n return true;\n }\n });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\n const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys } = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n return target[prop];\n }\n const value = resolve();\n // cache the resolved value\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n let value = _proxy[prop]; // resolve from proxy\n // resolve with context\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n // if the resolved value is an object, create a sub resolver for it\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n const { _proxy , _context , _subProxy , _stack } = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n let value = getValue(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n // When scriptable option returns an object, create a resolver on that.\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n return value[_context.index % value.length];\n } else if (isObject(value[0])) {\n // Array of objects, return array or resolvers\n const arr = value;\n const scopes = _proxy._scopes.filter((s)=>s !== arr);\n value = [];\n for (const item of arr){\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes){\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n // When we reach the descriptor that defines a new _fallback, return that.\n // The fallback will resume to that new scope.\n return fallback;\n }\n } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n // Fallback to `false` results to `false`, when falling back to different key.\n // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [\n ...parentScopes,\n ...rootScopes\n ];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (typeof fallback !== 'undefined' && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [\n ''\n ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while(key){\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n // For array of objects, the object is used to store updated values\n return value;\n }\n return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes){\n value = _resolve(readKey(prefix, prop), scopes);\n if (typeof value !== 'undefined') {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes){\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (typeof value !== 'undefined') {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes){\n for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const { iScale } = meta;\n const { key ='r' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen - 1; ++i){\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for(i = 0, ilen = points.length; i < ilen; ++i){\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt)=>!pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for(i = 0, ilen = points.length; i < ilen; ++i){\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * @private\n */ function _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for(let i = 0; i < 4; i++){\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const { offsetX , offsetY } = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {\n x,\n y,\n box\n };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\n }\n const { canvas , currentDevicePixelRatio } = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const { x , y , box } = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let { width , height } = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let { width , height } = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n height\n };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n const canvas = chart.canvas;\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive () {\n passiveSupported = true;\n return false;\n }\n };\n if (_isDomSupported()) {\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n }\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x (x) {\n return rectX + rectX + width - x;\n },\n setWidth (w) {\n width = w;\n },\n textAlign (align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus (x, value) {\n return x - value;\n },\n leftForLtr (x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x (x) {\n return x;\n },\n setWidth (w) {},\n textAlign (align) {\n return align;\n },\n xPlus (x, value) {\n return x + value;\n },\n leftForLtr (x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction')\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n return {\n between: _isBetween,\n compare: (a, b)=>a - b,\n normalize: (x)=>x\n };\n}\nfunction normalizeSegment({ start , end , count , loop , style }) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const { property , start: startBound , end: endBound } = bounds;\n const { between , normalize } = propertyFn(property);\n const count = points.length;\n let { start , end , loop } = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for(i = 0, ilen = count; i < ilen; ++i){\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\n function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [\n segment\n ];\n }\n const { property , start: startBound , end: endBound } = bounds;\n const count = points.length;\n const { compare , between , normalize } = propertyFn(property);\n const { start , end , loop , style } = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = ()=>inside || startIsBefore();\n const shouldStop = ()=>!inside || endIsBefore();\n for(let i = start, prev = start; i <= end; ++i){\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\n function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for(let i = 0; i < segments.length; i++){\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while(start < count && !points[start].skip){\n start++;\n }\n }\n while(start < count && points[start].skip){\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while(end > start && points[end % count].skip){\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\n function solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for(end = start + 1; end <= max; ++end){\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\n function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const { start , end } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [\n {\n start,\n end,\n loop\n }\n ], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const { _datasetIndex: datasetIndex , options: { spanGaps } } = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while(points[s % count].skip){\n s -= dir;\n }\n while(points[e % count].skip){\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments){\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for(i = start + 1; i <= segment.end; i++){\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n if (!prevStyle) {\n return false;\n }\n const cache = [];\n const replacer = function(key, value) {\n if (!isPatternOrGradient(value)) {\n return value;\n }\n if (!cache.includes(value)) {\n cache.push(value);\n }\n return cache.indexOf(value);\n };\n return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, fontString as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, overrideTextDirection as aA, _textX as aB, restoreTextDirection as aC, drawPointLegend as aD, distanceBetweenPoints as aE, noop as aF, _setMinAndMaxByKey as aG, niceNum as aH, almostWhole as aI, almostEquals as aJ, _decimalPlaces as aK, Ticks as aL, log10 as aM, _longestText as aN, _filterBetween as aO, _lookup as aP, isPatternOrGradient as aQ, getHoverColor as aR, clone as aS, _merger as aT, _mergerIf as aU, _deprecated as aV, _splitKey as aW, toFontString as aX, splineCurve as aY, splineCurveMonotone as aZ, getStyle as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, _elementsEqual as ah, _isClickEvent as ai, _isBetween as aj, _readValueToProps as ak, _updateBezierControlPoints as al, _computeSegments as am, _boundSegments as an, _steppedInterpolation as ao, _bezierInterpolation as ap, _pointInLine as aq, _steppedLineTo as ar, _bezierCurveTo as as, drawPoint as at, addRoundedRectPath as au, toTRBL as av, toTRBLCorners as aw, _boundSegment as ax, _normalizeAngle as ay, getRtlAdapter as az, isArray as b, toLineHeight as b0, PITAU as b1, INFINITY as b2, RAD_PER_DEG as b3, QUARTER_PI as b4, TWO_THIRDS_PI as b5, _angleDiff as b6, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.segment.js.map\n","/*!\n * Chart.js v4.4.8\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as _elementsEqual, ai as _isClickEvent, aj as _isBetween, ak as _readValueToProps, al as _updateBezierControlPoints, am as _computeSegments, an as _boundSegments, ao as _steppedInterpolation, ap as _bezierInterpolation, aq as _pointInLine, ar as _steppedLineTo, as as _bezierCurveTo, at as drawPoint, au as addRoundedRectPath, av as toTRBL, aw as toTRBLCorners, ax as _boundSegment, ay as _normalizeAngle, az as getRtlAdapter, aA as overrideTextDirection, aB as _textX, aC as restoreTextDirection, aD as drawPointLegend, aE as distanceBetweenPoints, aF as noop, aG as _setMinAndMaxByKey, aH as niceNum, aI as almostWhole, aJ as almostEquals, aK as _decimalPlaces, aL as Ticks, aM as log10, aN as _longestText, aO as _filterBetween, aP as _lookup } from './chunks/helpers.segment.js';\nimport '@kurkle/color';\n\nclass Animator {\n constructor(){\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach((fn)=>fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, ()=>{\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart)=>{\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for(; i >= 0; --i){\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for(; i >= 0; --i){\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean (from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color (from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number (from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to){\n const currentValue = target[prop];\n to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n const from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n this._from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej)=>{\n promises.push({\n res,\n rej\n });\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for(let i = 0; i < promises.length; i++){\n promises[i][method]();\n }\n }\n}\n\nclass Animations {\n constructor(chart, config){\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach((key)=>{\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions){\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [\n key\n ]).forEach((prop)=>{\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(()=>{\n target.options = newOptions;\n }, ()=>{\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for(i = props.length - 1; i >= 0; --i){\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for(let i = 0; i < keys.length; i++){\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n let found = false;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n found = true;\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n if (!found && !options.all) {\n return 0;\n }\n return value;\n}\nfunction convertObjectDataToArray(data, meta) {\n const { iScale , vScale } = meta;\n const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n key = keys[i];\n adata[i] = {\n [iAxisKey]: key,\n [vAxisKey]: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const { min , max , minDefined , maxDefined } = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n const value = stack[meta.index];\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const { chart , _cachedMeta: meta } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const { iScale , vScale , index: datasetIndex } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for(let i = 0; i < ilen; ++i){\n const item = parsed[i];\n const { [iAxis]: index , [vAxis]: value } = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n });\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items){\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n const meta = this._cachedMeta;\n this._data = convertObjectDataToArray(data, meta);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n meta._stacked = isStacked(meta.vScale, meta);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const { _cachedMeta: meta , _data: data } = this;\n const { iScale , _stacked } = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n for(i = 0; i < count; ++i){\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {\n mode\n });\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const { min: otherMin , max: otherMax } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for(i = 0; i < ilen; ++i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for(i = ilen - 1; i >= 0; --i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for(i = 0, ilen = parsed.length; i < ilen; ++i){\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || elements.length - start;\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for(i = start; i < start + count; ++i){\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for(i = 0; i < active.length; ++i){\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [\n `${elementType}Hover`,\n 'hover',\n elementType,\n ''\n ] : [\n elementType,\n ''\n ];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = ()=>this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions,\n includeOptions\n };\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList){\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr)=>{\n arr.length += count;\n for(i = arr.length - 1; i >= end; i--){\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for(i = start; i < end; ++i){\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([\n this.index,\n ...args\n ]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync([\n '_insertElements',\n this.getDataset().data.length - count,\n count\n ]);\n }\n _onDataPop() {\n this._sync([\n '_removeElements',\n this._cachedMeta.data.length - 1,\n 1\n ]);\n }\n _onDataShift() {\n this._sync([\n '_removeElements',\n 0,\n 1\n ]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync([\n '_removeElements',\n start,\n count\n ]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync([\n '_insertElements',\n start,\n newCount\n ]);\n }\n }\n _onDataUnshift() {\n this._sync([\n '_insertElements',\n 0,\n arguments.length\n ]);\n }\n}\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n }\n return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = ()=>{\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for(i = 0, ilen = values.length; i < ilen; ++i){\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for(i = start, ilen = start + count; i < ilen; ++i){\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const { start , end , reverse , top , bottom } = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount }, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n };\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for(i = start, ilen = start + count; i < ilen; ++i){\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const { iScale , vScale } = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const { index , _cachedMeta: { vScale } } = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n for(let i = start; i < start + count; i++){\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const { iScale } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n const iScaleValue = currentParsed && currentParsed[iScale.axis];\n const skipNull = (meta)=>{\n const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets){\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const { _cachedMeta: { vScale , _stacked , index: datasetIndex } , options: { base: baseValue , minBarLength } } = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for(; i < ilen; ++i){\n if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\n\nclass BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'borderWidth',\n 'radius'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nclass DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'circumference',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'x',\n 'y',\n 'offset',\n 'borderWidth',\n 'spacing'\n ]\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: (name)=>name !== 'spacing',\n _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i)=>+data[i];\n if (isObject(data[start])) {\n const { key ='value' } = this._parsing;\n getter = (i)=>+resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for(i = start, ilen = start + count; i < ilen; ++i){\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for(let i = 0; i < this.chart.data.datasets.length; ++i){\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\n update(mode) {\n const chart = this.chart;\n const { chartArea } = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const { circumference , rotation } = this._getRotationExtents();\n const { ratioX , ratioY , offsetX , offsetY } = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for(i = 0; i < start; ++i){\n startAngle += this._circumference(i, reset);\n }\n for(i = start; i < start + count; ++i){\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for(i = 0; i < metaData.length; i++){\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for(i = 0, ilen = arcs.length; i < ilen; ++i){\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for(let i = 0; i < datasetIndex; ++i){\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n\nclass LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { dataset: line , data: points = [] , _dataset } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = 0; i < pointsCount; ++i){\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n\nclass PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ]\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index)=>{\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for(i = 0; i < start; ++i){\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for(i = start; i < start + count; i++){\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index)=>{\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n}\n\nclass PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n}\n\nclass RadarController extends DatasetController {\n static id = 'radar';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n };\n static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n\nclass ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { data: points = [] } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n if (!this.datasetElementType) {\n this.addElements();\n }\n const { dataset: line , _dataset } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n } else if (this.datasetElementType) {\n delete meta.dataset;\n this.datasetElementType = false;\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const { showLine } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = start; i < start + count; ++i){\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */ static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n options;\n constructor(options){\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const { controller , data , _sorted } = metaset;\n const iScale = controller._cachedMeta.iScale;\n const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n const result = lookupMethod(data, axis, value);\n if (spanGaps) {\n const { vScale } = controller._cachedMeta;\n const { _parsed } = metaset;\n const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n result.lo -= Math.max(0, distanceToDefinedLo);\n const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n result.hi += Math.max(0, distanceToDefinedHi);\n }\n return result;\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n const { index , data } = metasets[i];\n const { lo , hi } = binarySearch(metasets[i], axis, value, intersect);\n for(let j = lo; j <= hi; ++j){\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n function getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const { startAngle , endAngle } = element.getProps([\n 'startAngle',\n 'endAngle'\n ], useFinalPosition);\n const { angle } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [\n {\n element,\n datasetIndex,\n index\n }\n ];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n var Interaction = {\n evaluateInteractionItems,\n modes: {\n index (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\n dataset (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for(let i = 0; i < data.length; ++i){\n items.push({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\n point (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = [\n 'left',\n 'top',\n 'right',\n 'bottom'\n];\nfunction filterByPosition(array, position) {\n return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b)=>{\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n box = boxes[i];\n ({ position: pos , options: { stack , stackWeight =1 } } = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts){\n const { stack , pos , stackWeight } = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n function setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const { vBoxMaxWidth , hBoxMaxHeight } = params;\n let i, ilen, layout;\n for(i = 0, ilen = layouts.length; i < ilen; ++i){\n layout = layouts[i];\n const { fullSize } = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const { pos , box } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach((pos)=>{\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions([\n 'left',\n 'right'\n ]) : marginForPositions([\n 'top',\n 'bottom'\n ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const { same , other } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let { x , y } = chartArea;\n for (const layout of boxes){\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n const weight = layout.stackWeight / stack.weight || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height = chartArea.h * weight;\n const width = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n }\n stack.start = x;\n stack.placed += height;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [\n {\n z: 0,\n draw (chartArea) {\n item.draw(chartArea);\n }\n }\n ];\n };\n chart.boxes.push(item);\n },\n removeBox (chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure (chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update (chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, (box)=>{\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, (layout)=>{\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n if (node) {\n node.addEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction removeListener(chart, type, listener) {\n if (chart && chart.canvas) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n }\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const { x , y } = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList){\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart)=>{\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height)=>{\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver((entries)=>{\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event)=>{\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n [\n 'height',\n 'width'\n ].forEach((prop)=>{\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key)=>{\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = canvas && _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n static defaults = {};\n static defaultRoutes = undefined;\n x;\n y;\n active = false;\n options;\n $animations;\n tooltipPosition(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach((prop)=>{\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for(i = 0; i < ticks.length; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while(next < 0){\n count++;\n next = Math.round(start + count * spacing);\n }\n for(i = Math.max(start, 0); i < end; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n function getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for(diff = arr[0], i = 1; i < len; ++i){\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for(; i < len; i += increment){\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n function garbageCollect(caches, length) {\n each(caches, (cache)=>{\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for(i = 0; i < gcLen; ++i){\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n function getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const { top , left , bottom , right , chart } = scale;\n const { chartArea , scales } = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends Element {\n constructor(cfg){\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let { _userMin , _userMax , _suggestedMin , _suggestedMax } = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n max\n };\n }\n const metas = this.getMatchingVisibleMetas();\n for(let i = 0, ilen = metas.length; i < ilen; ++i){\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [\n this\n ]);\n }\n update(maxWidth, maxHeight, margins) {\n const { beginAtZero , grace , ticks: tickOpts } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [\n this\n ]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [\n this\n ]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [\n this\n ]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [\n this\n ]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [\n this\n ]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [\n tick.value,\n i,\n ticks\n ], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [\n this\n ]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [\n this\n ]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [\n this\n ]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [\n this\n ]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts } } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const { first , last , widest , highest } = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const { ticks: { align , padding } , position } = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [\n this\n ]);\n }\n isHorizontal() {\n const { axis , position } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const { ctx , _longestTextCache: caches } = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for(i = 0; i < length; i += increment){\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for(j = 0, jlen = label.length; j < jlen; ++j){\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx)=>({\n width: widths[idx] || 0,\n height: heights[idx] || 0\n });\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const { min , max } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const { grid , position , border } = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for(i = 0; i < ticksLength; i += step){\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const { position , ticks: optionTicks } = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const { align , crossAlign , padding , mirror } = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n x = this.chart.scales[positionAxisID].getPixelForValue(value);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += lineHeight / 2 * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch(textBaseline){\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch(textAlign){\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n case 'inner':\n if (i === ilen - 1) {\n left -= width;\n } else if (i > 0) {\n left -= width / 2;\n }\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [\n x,\n y\n ],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const { position , ticks } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const { position , ticks: { crossAlign , mirror , padding } } = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n drawBackground() {\n const { ctx , options: { backgroundColor } , left , top , width , height } = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex((t)=>t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style)=>{\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for(i = 0, ilen = items.length; i < ilen; ++i){\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n drawBorder() {\n const { chart , ctx , options: { border , grid } } = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this.getLabelItems(chartArea);\n for (const item of items){\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const { ctx , options: { position , title , reverse } } = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const { titleX , titleY , maxWidth , rotation } = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [\n {\n z: tz,\n draw: (chartArea)=>{\n this.draw(chartArea);\n }\n }\n ];\n }\n return [\n {\n z: gz,\n draw: (chartArea)=>{\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n },\n {\n z: bz,\n draw: ()=>{\n this.drawBorder();\n }\n },\n {\n z: tz,\n draw: (chartArea)=>{\n this.drawLabels(chartArea);\n }\n }\n ];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override){\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach((property)=>{\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [\n scope\n ].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor(){\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [\n this.controllers,\n this.scales,\n this.elements\n ];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [\n ...args\n ].forEach((arg)=>{\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n this._exec(method, reg, arg);\n } else {\n each(arg, (item)=>{\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for(let i = 0; i < this._typedRegistries.length; i++){\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n constructor(){\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors){\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [\n chart,\n args,\n descriptor.options\n ];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n function allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for(let i = 0; i < keys.length; i++){\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for(let i = 0; i < local.length; i++){\n const plugin = local[i];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n localIds\n };\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, { plugins , localIds }, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins){\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, { plugin , local }, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [\n ''\n ], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, ...scaleOptions) {\n if (idMatchesAxis(id)) {\n return id;\n }\n for (const opts of scaleOptions){\n const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n if (axis) {\n return axis;\n }\n }\n throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n if (dataset[axis + 'AxisID'] === id) {\n return {\n axis\n };\n }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n if (config.data && config.data.datasets) {\n const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n if (boundDs.length) {\n return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n }\n }\n return {};\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n Object.keys(configScales).forEach((id)=>{\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [\n {\n axis\n },\n scaleConf,\n defaultScaleOptions[axis],\n defaultScaleOptions[defaultId]\n ]);\n });\n config.data.datasets.forEach((dataset)=>{\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [\n {\n axis\n },\n configScales[id],\n defaultScaleOptions[defaultID]\n ]);\n });\n });\n Object.keys(scales).forEach((key)=>{\n const scale = scales[key];\n mergeIf(scale, [\n defaults.scales[scale.type],\n defaults.scale\n ]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config){\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, ()=>[\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n [\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]\n ]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`, ()=>[\n [\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || []\n ]\n ]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const { options , type } = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach((keys)=>{\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n }\n keys.forEach((key)=>addIfFound(scopes, options, key));\n keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach((key)=>addIfFound(scopes, defaults, key));\n keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const { options , type } = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {\n type\n },\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = [\n ''\n ]) {\n const result = {\n $shared: true\n };\n const { resolver , subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names){\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [\n ''\n ], descriptorDefaults) {\n const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\nfunction needContext(proxy, names) {\n const { isScriptable , isIndexable } = _descriptors(proxy);\n for (const prop of names){\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"4.4.8\";\n\nconst KNOWN_POSITIONS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [\n context\n ], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [\n context\n ], chart);\n}\n function getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys){\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nfunction getSizeForArea(scale, chartArea, field) {\n return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n const { xScale , yScale } = meta;\n if (xScale && yScale) {\n return {\n left: getSizeForArea(xScale, chartArea, 'left'),\n right: getSizeForArea(xScale, chartArea, 'right'),\n top: getSizeForArea(yScale, chartArea, 'top'),\n bottom: getSizeForArea(yScale, chartArea, 'bottom')\n };\n }\n return chartArea;\n}\nclass Chart {\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n constructor(item, userConfig){\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const { options: { aspectRatio , maintainAspectRatio } , width , height , _aspectRatio } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n height\n };\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [\n this,\n newSize\n ], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID)=>{\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id)=>{\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map((id)=>{\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n each(items, (item)=>{\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id)=>{\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale)=>{\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b)=>a.index - b.index);\n if (numMeta > numData) {\n for(let i = numData; i < numMeta; ++i){\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const { _metasets: metasets , data: { datasets } } = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index)=>{\n if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for(i = 0, ilen = datasets.length; i < ilen; i++){\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const { datasetElementType , dataElementType } = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex)=>{\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n const { controller } = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller)=>{\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\n const { _active , _lastEvent } = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale)=>{\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const { _hiddenIndices } = this;\n const changes = this._getUniformDataChanges() || [];\n for (const { method , start , count } of changes){\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n const changeSet = makeSet(0);\n for(let i = 1; i < datasetCount; i++){\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box)=>{\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index)=>{\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this.getDatasetMeta(i).controller.configure();\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._updateDataset(i, isFunction(mode) ? mode({\n datasetIndex: i\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const { width , height } = this._resizeBeforeDraw;\n this._resizeBeforeDraw = null;\n this._resize(width, height);\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const layers = this._layers;\n for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for(; i < layers.length; ++i){\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = getDatasetArea(meta, this.chartArea);\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const { canvas , ctx } = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y)=>{\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type)=>_add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener)=>{\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height)=>{\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = ()=>{\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = ()=>{\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const { _active: lastActive = [] , options } = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [\n e,\n active,\n this\n ], this);\n if (isClick) {\n callback(options.onClick, [\n e,\n active,\n this\n ], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipArc(ctx, element, endAngle) {\n const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;\n let angleMargin = pixelMargin / outerRadius;\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, [\n 'outerStart',\n 'outerEnd',\n 'innerStart',\n 'innerEnd'\n ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val)=>{\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n const { x , y , startAngle: start , pixelMargin , innerRadius: innerR } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const { outerStart , outerEnd , innerStart , innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference } = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference , options } = element;\n const { borderWidth , borderJoinStyle , borderDash , borderDashOffset } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n ctx.setLineDash(borderDash || []);\n ctx.lineDashOffset = borderDashOffset;\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash'\n };\n circumference;\n endAngle;\n fullCircles;\n innerRadius;\n outerRadius;\n pixelMargin;\n startAngle;\n constructor(cfg){\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n const { angle , distance } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\n const { startAngle , endAngle , innerRadius , outerRadius , circumference } = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n const betweenAngles = _circumference >= TAU || nonZeroBetween;\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , startAngle , endAngle , innerRadius , outerRadius } = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const { offset , spacing } = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const { options , circumference } = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\n}\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const { start: paramsStart = 0 , end: paramsEnd = count - 1 } = params;\n const { start: segmentStart , end: segmentEnd } = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n function pathSegment(ctx, line, segment, params) {\n const { points , options } = line;\n const { count , start , loop , ilen } = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let { move =true , reverse } = params || {};\n let i, point, prev;\n for(i = 0; i <= ilen; ++i){\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const { count , start , ilen } = pathVars(points, segment, params);\n const { move =true , reverse } = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n const drawX = ()=>{\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for(i = 0; i <= ilen; ++i){\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\n function _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const { segments , options } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments){\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n static id = 'line';\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg){\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for(i = 0, ilen = segments.length; i < ilen; ++i){\n const { start , end } = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments){\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const { [axis]: value } = el.getProps([\n axis\n ], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n static id = 'point';\n parsed;\n skip;\n stop;\n /**\n * @type {any}\n */ static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n /**\n * @type {any}\n */ static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n const { x , y , base , width , height } = bar.getProps([\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const { enableBorderRadius } = bar.getProps([\n 'enableBorderRadius'\n ]);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const { inflateAmount , options: { borderColor , backgroundColor } } = this;\n const { inner , outer } = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , base , horizontal } = this.getProps([\n 'x',\n 'y',\n 'base',\n 'horizontal'\n ], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)',\n 'rgb(255, 99, 132)',\n 'rgb(255, 159, 64)',\n 'rgb(255, 205, 86)',\n 'rgb(75, 192, 192)',\n 'rgb(153, 102, 255)',\n 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex)=>{\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for(k in descriptors){\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nfunction containsDefaultColorsDefenitions() {\n return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout (chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const { data: { datasets } , options: chartOptions } = chart.config;\n const { elements } = chartOptions;\n const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n if (!options.forceOverride && containsColorDefenition) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for(i = 0; i < samples - 2; i++){\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for(j = avgRangeStart; j < avgRangeEnd; j++){\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const { x: pointAx , y: pointAy } = data[a];\n maxArea = area = -1;\n for(j = rangeOffs; j < rangeTo; j++){\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for(i = start; i < start + count; ++i){\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset)=>{\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const { iScale } = meta;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options)=>{\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex)=>{\n const { _data , indexAxis } = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([\n indexAxis,\n chart.options.indexAxis\n ]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let { start , count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch(options.algorithm){\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy (chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments){\n let { start , end } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments){\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources){\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _pointsFromSegments(boundary, line) {\n const { x =null , y =null } = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({ start , end })=>{\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for(; end > start; end--){\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [\n index\n ];\n let target;\n if (!propagate) {\n return fill;\n }\n while(fill !== false && visited.indexOf(fill) === -1){\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\n function _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return [\n 'origin',\n 'start',\n 'end',\n 'stack',\n 'shape'\n ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\n function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n function parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const { scale , index , line } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n for(let j = segment.start; j <= segment.end; j++){\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({\n points,\n options: {}\n });\n}\n function getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for(let i = 0; i < metas.length; i++){\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for(let j = 0; j < linesBelow.length; j++){\n const line = linesBelow[j];\n const { first , last , point } = findPoint(line, sourcePoint, 'x');\n if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {\n first,\n last,\n point\n };\n}\n\nclass simpleArc {\n constructor(opts){\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const { x , y , radius } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const { x , y , radius } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const { chart , fill , line } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const { scale ={} , fill } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const { scale , fill } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for(let i = 0; i < length; ++i){\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const { line , scale , axis } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const { above =color , below =color } = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const { line , target , above , below , area , scale } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments){\n const { start , end } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const { line , target , property , color , scale } = cfg;\n const segments = _segments(line, target, property);\n for (const { source: src , target: tgt , start , end } of segments){\n const { style: { backgroundColor =color } = {} } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const { top , bottom } = scale.chart.chartArea;\n const { property , start , end } = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate (chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for(i = 0; i < count; ++i){\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for(i = 0; i < count; ++i){\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw (chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw (chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw (chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n let { boxHeight =fontSize , boxWidth =fontSize } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [\n this.chart\n ], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const { options , ctx } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const { boxWidth , itemHeight } = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const { ctx , maxWidth , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [\n 0\n ];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i)=>{\n const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const { ctx , maxHeight , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i)=>{\n const { itemWidth , itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const { legendHitBoxes: hitboxes , options: { align , labels: { padding } , rtl } } = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes){\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox of hitboxes){\n if (hitbox.col !== col) {\n col = hitbox.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox.top = top;\n hitbox.left += this.left + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n top += hitbox.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const { options: opts , columnSizes , lineWidths , ctx } = this;\n const { align , labels: labelOpts } = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const { padding } = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const { boxWidth , boxHeight , itemHeight } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i)=>{\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for(i = 0; i < lh.length; ++i){\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [\n e,\n previous,\n this\n ], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [\n e,\n hoveredItem,\n this\n ], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [\n e,\n hoveredItem,\n this\n ], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start (chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop (chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate (chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate (chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent (chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick (e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx)=>ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels (chart) {\n const datasets = chart.data.datasets;\n const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta)=>{\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx)=>ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: (name)=>!name.startsWith('on'),\n labels: {\n _scriptable: (name)=>![\n 'generateLabels',\n 'filter',\n 'sort'\n ].includes(name)\n }\n }\n};\n\nclass Title extends Element {\n constructor(config){\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const { top , left , bottom , right , options } = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const { titleX , titleY , maxWidth , rotation } = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start (chart, _args, options) {\n createTitle(chart, options);\n },\n stop (chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate (chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start (chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop (chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate (chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst positioners = {\n average (items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let xSet = new Set();\n let y = 0;\n let count = 0;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n xSet.add(pos.x);\n y += pos.y;\n ++count;\n }\n }\n if (count === 0 || xSet.size === 0) {\n return false;\n }\n const xAverage = [\n ...xSet\n ].reduce((a, b)=>a + b) / xSet.size;\n return {\n x: xAverage,\n y: y / count\n };\n },\n nearest (items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\n function splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n function createTooltipItem(chart, item) {\n const { element , datasetIndex , index } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const { label , value } = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n function getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const { body , footer , title } = tooltip;\n const { boxWidth , boxHeight } = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n each(body, (bodyItem)=>{\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const { y , height } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const { x , width } = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const { x , width } = size;\n const { width: chartWidth , chartArea: { left , right } } = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\n function determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let { x , width } = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let { y , height } = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n const { caretSize , caretPadding , cornerRadius } = options;\n const { xAlign , yAlign } = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n beforeTitle: noop,\n title (tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label (tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor () {\n return this.options.bodyColor;\n },\n labelPointStyle (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n constructor(config){\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const { callbacks } = options;\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const { callbacks } = options;\n const bodyItems = [];\n each(tooltipItems, (context)=>{\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const { callbacks } = options;\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for(i = 0, len = active.length; i < len; ++i){\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n }\n each(tooltipItems, (context)=>{\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const { xAlign , yAlign } = this;\n const { caretSize , cornerRadius } = options;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n const { x: ptX , y: ptY } = tooltipPoint;\n const { width , height } = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColor = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const { boxHeight , boxWidth } = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColor.borderColor;\n ctx.fillStyle = labelColor.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n ctx.strokeStyle = labelColor.borderColor;\n ctx.setLineDash(labelColor.borderDash || []);\n ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n const borderRadius = toTRBLCorners(labelColor.borderRadius);\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColor.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const { body } = this;\n const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding } = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for(i = 0, ilen = body.length; i < ilen; ++i){\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for(j = 0, jlen = lines.length; j < jlen; ++j){\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const { xAlign , yAlign } = this;\n const { x , y } = pt;\n const { width , height } = tooltipSize;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const { caretX , caretY , options } = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit (chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw (chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent (chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts)=>opts.bodyFont.size,\n boxWidth: (ctx, opts)=>opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'width',\n 'height',\n 'caretX',\n 'caretY'\n ]\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: [\n 'interaction'\n ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nclass CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg){\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const { index , label } of added){\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for(let value = min; value <= max; value++){\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds } = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const { min: rmin , max: rmax } = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [\n {\n value: rmin\n },\n {\n value: rmax\n }\n ];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for(; j < numSpaces; ++j){\n const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n if (maxDefined && tickValue > max) {\n break;\n }\n ticks.push({\n value: tickValue\n });\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation }) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const { beginAtZero } = this.options;\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let { maxTicksLimit , stepSize } = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while(steps(min, max, rangeExp) > 10){\n rangeExp++;\n }\n while(steps(min, max, rangeExp) < 10){\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max }) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while(value < max){\n ticks.push({\n value,\n major: isMajor(value),\n significand\n });\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [\n raw,\n index\n ]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [\n label\n ];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\n function fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for(let i = 0; i < valueCount; i++){\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n const outerDistance = scale.drawingArea;\n const { extra , additionalAngle , padding , size } = itemOpts;\n const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n return {\n visible: true,\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n };\n}\nfunction isNotOverlapped(item, area) {\n if (!area) {\n return true;\n }\n const { left , top , right , bottom } = item;\n const apexesInArea = _isPointInArea({\n x: left,\n y: top\n }, area) || _isPointInArea({\n x: left,\n y: bottom\n }, area) || _isPointInArea({\n x: right,\n y: top\n }, area) || _isPointInArea({\n x: right,\n y: bottom\n }, area);\n return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const { centerPointLabels , display } = opts.pointLabels;\n const itemOpts = {\n extra: getTickBackdropHeight(opts) / 2,\n additionalAngle: centerPointLabels ? PI / valueCount : 0\n };\n let area;\n for(let i = 0; i < valueCount; i++){\n itemOpts.padding = padding[i];\n itemOpts.size = labelSizes[i];\n const item = createPointLabelItem(scale, i, itemOpts);\n items.push(item);\n if (display === 'auto') {\n item.visible = isNotOverlapped(item, area);\n if (item.visible) {\n area = item;\n }\n }\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n const { left , top , right , bottom } = item;\n const { backdropColor } = opts;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(opts.borderRadius);\n const padding = toPadding(opts.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n}\nfunction drawPointLabels(scale, labelCount) {\n const { ctx , options: { pointLabels } } = scale;\n for(let i = labelCount - 1; i >= 0; i--){\n const item = scale._pointLabelItems[i];\n if (!item.visible) {\n continue;\n }\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n drawPointLabelBox(ctx, optsAtIndex, item);\n const plFont = toFont(optsAtIndex.font);\n const { x , y , textAlign } = item;\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const { ctx } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for(let i = 1; i < labelCount; i++){\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const { color , lineWidth } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash || []);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback (label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg){\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index)=>{\n const label = callback(this.options.pointLabels.callback, [\n value,\n index\n ], this);\n return label || label === 0 ? label : '';\n }).filter((v, i)=>this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const { left , top , right , bottom } = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom\n };\n }\n drawBackground() {\n const { backgroundColor , grid: { circular } } = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const { angleLines , grid , border } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index)=>{\n if (index !== 0 || index === 0 && this.min < 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for(i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const { color , lineWidth } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index)=>{\n if (index === 0 && this.min >= 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color,\n strokeColor: optsAtIndex.textStrokeColor,\n strokeWidth: optsAtIndex.textStrokeWidth\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\n const UNITS = /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n return a - b;\n}\n function parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const { parser , round , isoWeekday } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n function addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const { lo , hi } = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for(i = 0; i < ilen; ++i){\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props){\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map((tick)=>+tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort(sorter).map((x)=>+x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [\n time,\n index,\n ticks\n ], this);\n }\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n exampleTime\n ], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for(i = 0, ilen = labels.length; i < ilen; ++i){\n timestamps.push(parse(this, labels[i]));\n }\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({ lo , hi } = _lookupByKey(table, 'pos', val));\n }\n ({ pos: prevSource , time: prevTarget } = table[lo]);\n ({ pos: nextSource , time: nextTarget } = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({ lo , hi } = _lookupByKey(table, 'time', val));\n }\n ({ time: prevSource , pos: prevTarget } = table[lo]);\n ({ time: nextSource , pos: nextTarget } = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const { min , max } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {\n time: min,\n pos: 0\n },\n {\n time: max,\n pos: 1\n }\n ];\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\n }\n _generate() {\n const min = this.min;\n const max = this.max;\n let timestamps = super.getDataTimestamps();\n if (!timestamps.includes(min) || !timestamps.length) {\n timestamps.splice(0, 0, min);\n }\n if (!timestamps.includes(max) || timestamps.length === 1) {\n timestamps.push(max);\n }\n return timestamps.sort((a, b)=>a - b);\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import React, { forwardRef, useRef, useEffect } from 'react';\nimport { Chart as Chart$1, LineController, BarController, RadarController, DoughnutController, PolarAreaController, BubbleController, PieController, ScatterController } from 'chart.js';\n\nconst defaultDatasetIdKey = 'label';\nfunction reforwardRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\nfunction setOptions(chart, nextOptions) {\n const options = chart.options;\n if (options && nextOptions) {\n Object.assign(options, nextOptions);\n }\n}\nfunction setLabels(currentData, nextLabels) {\n currentData.labels = nextLabels;\n}\nfunction setDatasets(currentData, nextDatasets) {\n let datasetIdKey = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : defaultDatasetIdKey;\n const addedDatasets = [];\n currentData.datasets = nextDatasets.map((nextDataset)=>{\n // given the new set, find it's current match\n const currentDataset = currentData.datasets.find((dataset)=>dataset[datasetIdKey] === nextDataset[datasetIdKey]);\n // There is no original to update, so simply add new one\n if (!currentDataset || !nextDataset.data || addedDatasets.includes(currentDataset)) {\n return {\n ...nextDataset\n };\n }\n addedDatasets.push(currentDataset);\n Object.assign(currentDataset, nextDataset);\n return currentDataset;\n });\n}\nfunction cloneData(data) {\n let datasetIdKey = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : defaultDatasetIdKey;\n const nextData = {\n labels: [],\n datasets: []\n };\n setLabels(nextData, data.labels);\n setDatasets(nextData, data.datasets, datasetIdKey);\n return nextData;\n}\n/**\n * Get dataset from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getDatasetAtEvent(chart, event) {\n return chart.getElementsAtEventForMode(event.nativeEvent, 'dataset', {\n intersect: true\n }, false);\n}\n/**\n * Get single dataset element from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getElementAtEvent(chart, event) {\n return chart.getElementsAtEventForMode(event.nativeEvent, 'nearest', {\n intersect: true\n }, false);\n}\n/**\n * Get all dataset elements from mouse click event\n * @param chart - Chart.js instance\n * @param event - Mouse click event\n * @returns Dataset\n */ function getElementsAtEvent(chart, event) {\n return chart.getElementsAtEventForMode(event.nativeEvent, 'index', {\n intersect: true\n }, false);\n}\n\nfunction ChartComponent(props, ref) {\n const { height = 150, width = 300, redraw = false, datasetIdKey, type, data, options, plugins = [], fallbackContent, updateMode, ...canvasProps } = props;\n const canvasRef = useRef(null);\n const chartRef = useRef(null);\n const renderChart = ()=>{\n if (!canvasRef.current) return;\n chartRef.current = new Chart$1(canvasRef.current, {\n type,\n data: cloneData(data, datasetIdKey),\n options: options && {\n ...options\n },\n plugins\n });\n reforwardRef(ref, chartRef.current);\n };\n const destroyChart = ()=>{\n reforwardRef(ref, null);\n if (chartRef.current) {\n chartRef.current.destroy();\n chartRef.current = null;\n }\n };\n useEffect(()=>{\n if (!redraw && chartRef.current && options) {\n setOptions(chartRef.current, options);\n }\n }, [\n redraw,\n options\n ]);\n useEffect(()=>{\n if (!redraw && chartRef.current) {\n setLabels(chartRef.current.config.data, data.labels);\n }\n }, [\n redraw,\n data.labels\n ]);\n useEffect(()=>{\n if (!redraw && chartRef.current && data.datasets) {\n setDatasets(chartRef.current.config.data, data.datasets, datasetIdKey);\n }\n }, [\n redraw,\n data.datasets\n ]);\n useEffect(()=>{\n if (!chartRef.current) return;\n if (redraw) {\n destroyChart();\n setTimeout(renderChart);\n } else {\n chartRef.current.update(updateMode);\n }\n }, [\n redraw,\n options,\n data.labels,\n data.datasets,\n updateMode\n ]);\n useEffect(()=>{\n if (!chartRef.current) return;\n destroyChart();\n setTimeout(renderChart);\n }, [\n type\n ]);\n useEffect(()=>{\n renderChart();\n return ()=>destroyChart();\n }, []);\n return /*#__PURE__*/ React.createElement(\"canvas\", {\n ref: canvasRef,\n role: \"img\",\n height: height,\n width: width,\n ...canvasProps\n }, fallbackContent);\n}\nconst Chart = /*#__PURE__*/ forwardRef(ChartComponent);\n\nfunction createTypedChart(type, registerables) {\n Chart$1.register(registerables);\n return /*#__PURE__*/ forwardRef((props, ref)=>/*#__PURE__*/ React.createElement(Chart, {\n ...props,\n ref: ref,\n type: type\n }));\n}\nconst Line = /* #__PURE__ */ createTypedChart('line', LineController);\nconst Bar = /* #__PURE__ */ createTypedChart('bar', BarController);\nconst Radar = /* #__PURE__ */ createTypedChart('radar', RadarController);\nconst Doughnut = /* #__PURE__ */ createTypedChart('doughnut', DoughnutController);\nconst PolarArea = /* #__PURE__ */ createTypedChart('polarArea', PolarAreaController);\nconst Bubble = /* #__PURE__ */ createTypedChart('bubble', BubbleController);\nconst Pie = /* #__PURE__ */ createTypedChart('pie', PieController);\nconst Scatter = /* #__PURE__ */ createTypedChart('scatter', ScatterController);\n\nexport { Bar, Bubble, Chart, Doughnut, Line, Pie, PolarArea, Radar, Scatter, getDatasetAtEvent, getElementAtEvent, getElementsAtEvent };\n//# sourceMappingURL=index.js.map\n","\nimport React, { useState, useEffect } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { ZillowAPI } from \"@/lib/zillow-api\";\nimport { chatGPT } from \"@/lib/chatgpt\";\nimport {\n BarChart3,\n TrendingUp,\n DollarSign,\n Home,\n Users,\n ArrowUpRight,\n ArrowDownRight,\n Building,\n Map,\n} from \"lucide-react\";\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n BarElement,\n Title,\n Tooltip,\n Legend,\n ArcElement\n} from 'chart.js';\nimport { Line, Bar, Pie } from 'react-chartjs-2';\n\n// Register ChartJS components\nChartJS.register(\n CategoryScale,\n LinearScale,\n PointElement,\n LineElement,\n BarElement,\n Title,\n Tooltip,\n Legend,\n ArcElement\n);\n\nfunction MarketAnalysis() {\n const [location, setLocation] = useState(\"\");\n const [marketData, setMarketData] = useState(null);\n const [loading, setLoading] = useState(false);\n const [aiInsights, setAiInsights] = useState(null);\n const { toast } = useToast();\n\n const analyzeMarket = async () => {\n if (!location) {\n toast({\n title: \"Error\",\n description: \"Please enter a location\",\n variant: \"destructive\"\n });\n return;\n }\n\n setLoading(true);\n try {\n // Get market data from Zillow\n const zillowData = await ZillowAPI.getDetailedMarketMetrics(location);\n \n // Get AI insights\n const insights = await chatGPT.getMarketInsights(location, zillowData);\n \n setMarketData(zillowData);\n setAiInsights(insights);\n \n toast({\n title: \"Analysis Complete\",\n description: \"Market analysis has been generated successfully.\",\n });\n } catch (error) {\n console.error('Market analysis error:', error);\n toast({\n title: \"Analysis Failed\",\n description: error.message || \"Unable to complete market analysis.\",\n variant: \"destructive\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n return (\n
\n
\n {/* Header */}\n
\n

\n Market Analysis\n

\n

\n Get detailed market insights and trends\n

\n
\n\n {/* Search Section */}\n
\n
\n setLocation(e.target.value)}\n className=\"flex-1\"\n />\n \n {loading ? \"Analyzing...\" : \"Analyze\"}\n \n
\n
\n\n {marketData && (\n
\n {/* Market Overview */}\n \n
\n
\n

Average Price

\n \n
\n

\n ${Math.round(marketData.pricing?.median).toLocaleString()}\n

\n
\n\n
\n
\n

Price per Sqft

\n \n
\n

\n ${Math.round(marketData.pricing?.pricePerSqft?.median).toLocaleString()}\n

\n
\n\n
\n
\n

Total Listings

\n \n
\n

\n {marketData.inventory?.total}\n

\n
\n\n
\n
\n

Market Health

\n \n
\n

\n {marketData.market?.score}/100\n

\n
\n \n\n {/* Charts */}\n
\n \n

Price Trends

\n {marketData.pricing?.trends && (\n t.date),\n datasets: [{\n label: 'Median Price',\n data: marketData.pricing.trends.map(t => t.price),\n borderColor: 'rgb(59, 130, 246)',\n tension: 0.1\n }]\n }}\n options={{\n responsive: true,\n plugins: {\n legend: {\n position: 'top',\n },\n }\n }}\n />\n )}\n \n\n \n

Property Types

\n {marketData.inventory?.byType && (\n \n )}\n \n
\n\n {/* Market Insights */}\n \n

Market Insights

\n
\n
\n
\n

Price Range

\n

Low: ${marketData.pricing?.range?.min?.toLocaleString()}

\n

Median: ${marketData.pricing?.range?.median?.toLocaleString()}

\n

High: ${marketData.pricing?.range?.max?.toLocaleString()}

\n
\n
\n

Market Activity

\n

Days on Market: {marketData.market?.daysOnMarket}

\n

Price Reductions: {marketData.market?.priceReductions}%

\n
\n
\n
\n
\n

Investment Metrics

\n

Cap Rate: {marketData.investment?.capRate}%

\n

Cash Flow: ${marketData.investment?.cashFlow?.monthly}

\n

ROI: {marketData.investment?.roi}%

\n
\n
\n

Demographics

\n

Population Growth: {marketData.demographics?.growth?.population}%

\n

Income Growth: {marketData.demographics?.growth?.income}%

\n

Employment Rate: {marketData.demographics?.employment}%

\n
\n
\n
\n \n\n {/* AI Analysis */}\n {aiInsights && (\n \n

AI Market Analysis

\n
\n {aiInsights}\n
\n \n )}\n
\n )}\n
\n
\n );\n}\n\nexport default MarketAnalysis;\n","\nimport React, { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { ZillowAPI } from \"@/lib/zillow-api\";\nimport { chatGPT } from \"@/lib/chatgpt\";\nimport PropertySearch from \"../PropertySearch\";\nimport {\n BarChart3,\n TrendingUp,\n DollarSign,\n Building,\n Home,\n Map,\n Download,\n Share2,\n Trash2,\n} from \"lucide-react\";\n\nfunction PropertyComparison() {\n const [properties, setProperties] = useState({\n propertyOne: null,\n propertyTwo: null\n });\n const [loading, setLoading] = useState(false);\n const [aiAnalysis, setAiAnalysis] = useState(null);\n const { toast } = useToast();\n\n const formatAddress = (property) => {\n if (!property) return '';\n \n if (typeof property.address === 'object') {\n const { streetAddress, city, state, zipcode } = property.address;\n return `${streetAddress || ''}, ${city || ''}, ${state || ''} ${zipcode || ''}`.trim();\n }\n \n return property.address || '';\n };\n\n const handlePropertySelect = async (property, propertyKey) => {\n setLoading(true);\n try {\n console.log(\"Selected property:\", property);\n \n // Get property details from Zillow\n const propertyDetails = await ZillowAPI.getPropertyDetails(property.zpid);\n console.log(\"Property details:\", propertyDetails);\n\n // Get market trends for the area\n const marketTrends = await ZillowAPI.getMarketTrends(formatAddress(property));\n console.log(\"Market trends:\", marketTrends);\n \n const enhancedProperty = {\n ...property,\n ...propertyDetails,\n marketTrends,\n formattedAddress: formatAddress(property)\n };\n\n setProperties(prev => ({\n ...prev,\n [propertyKey]: enhancedProperty\n }));\n\n // If both properties are selected, get AI comparison\n if (propertyKey === 'propertyTwo' || (propertyKey === 'propertyOne' && properties.propertyTwo)) {\n const comparison = await chatGPT.getPropertyComparison({\n propertyOne: propertyKey === 'propertyOne' ? enhancedProperty : properties.propertyOne,\n propertyTwo: propertyKey === 'propertyTwo' ? enhancedProperty : properties.propertyTwo\n });\n setAiAnalysis(comparison);\n }\n \n toast({\n title: \"Property Added\",\n description: \"Property has been added for comparison.\",\n });\n } catch (error) {\n console.error('Error loading property details:', error);\n toast({\n title: \"Error\",\n description: \"Failed to load property details. Please try again.\",\n variant: \"destructive\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n const calculateMetrics = (property) => {\n if (!property) return null;\n\n const price = parseFloat(property.price) || 0;\n const sqft = parseFloat(property.sqft) || 1; // Prevent division by zero\n\n return {\n pricePerSqft: price / sqft,\n estimatedRent: price * 0.008, // 0.8% rule for estimated rent\n capRate: ((price * 0.008 * 12) - (price * 0.02)) / price * 100,\n yearlyTaxes: price * 0.015, // Estimated yearly taxes\n insuranceCost: price * 0.005, // Estimated yearly insurance\n maintenanceCost: price * 0.01, // Estimated yearly maintenance\n appreciationRate: property.marketTrends?.appreciation || 3, // Default to 3% if not available\n rentGrowthRate: property.marketTrends?.rentGrowth || 2, // Default to 2% if not available\n marketScore: property.marketTrends?.marketTemp || 50, // Default to 50 if not available\n daysOnMarket: property.marketTrends?.daysOnMarket || 0,\n schoolRating: property.schoolRating || 'N/A',\n crimeRate: property.crimeRate || 'N/A',\n walkScore: property.walkScore || 'N/A',\n };\n };\n\n const handleDownloadReport = () => {\n // Implementation for downloading comparison report\n toast({\n title: \"Downloading Report\",\n description: \"Your comparison report is being generated...\",\n });\n };\n\n const handleShareComparison = () => {\n // Implementation for sharing comparison\n toast({\n title: \"Share Comparison\",\n description: \"Sharing options coming soon...\",\n });\n };\n\n const clearComparison = () => {\n setProperties({\n propertyOne: null,\n propertyTwo: null\n });\n setAiAnalysis(null);\n };\n\n return (\n
\n
\n {/* Header */}\n
\n

\n Compare Properties\n

\n

\n Select two properties to compare their investment potential\n

\n
\n\n {/* Property Selection */}\n
\n {/* Property One */}\n \n

Property One

\n handlePropertySelect(property, 'propertyOne')}\n />\n {properties.propertyOne && (\n
\n

{properties.propertyOne.formattedAddress}

\n

\n ${properties.propertyOne.price?.toLocaleString()}\n

\n
\n )}\n \n\n {/* Property Two */}\n \n

Property Two

\n handlePropertySelect(property, 'propertyTwo')}\n />\n {properties.propertyTwo && (\n
\n

{properties.propertyTwo.formattedAddress}

\n

\n ${properties.propertyTwo.price?.toLocaleString()}\n

\n
\n )}\n \n
\n\n {/* Comparison Results */}\n {properties.propertyOne && properties.propertyTwo && (\n \n {/* Key Metrics Comparison */}\n
\n
\n

Property One

\n

${properties.propertyOne.price?.toLocaleString()}

\n

{properties.propertyOne.formattedAddress}

\n
\n
\n

Price Difference

\n

\n ${Math.abs(properties.propertyOne.price - properties.propertyTwo.price).toLocaleString()}\n

\n

\n {((Math.abs(properties.propertyOne.price - properties.propertyTwo.price) / properties.propertyOne.price) * 100).toFixed(1)}% difference\n

\n
\n
\n

Property Two

\n

${properties.propertyTwo.price?.toLocaleString()}

\n

{properties.propertyTwo.formattedAddress}

\n
\n
\n\n {/* Property Details */}\n
\n {/* Basic Info */}\n
\n

Property Details

\n
\n
\n
\n

Beds/Baths

\n

{properties.propertyOne.beds}/{properties.propertyOne.baths}

\n
\n
\n

Difference

\n

\n {Math.abs(properties.propertyOne.beds - properties.propertyTwo.beds)}/{Math.abs(properties.propertyOne.baths - properties.propertyTwo.baths)}\n

\n
\n
\n

Beds/Baths

\n

{properties.propertyTwo.beds}/{properties.propertyTwo.baths}

\n
\n
\n\n
\n
\n

Square Feet

\n

{properties.propertyOne.sqft?.toLocaleString()}

\n
\n
\n

Difference

\n

\n {Math.abs(properties.propertyOne.sqft - properties.propertyTwo.sqft)?.toLocaleString()}\n

\n
\n
\n

Square Feet

\n

{properties.propertyTwo.sqft?.toLocaleString()}

\n
\n
\n\n
\n
\n

Year Built

\n

{properties.propertyOne.yearBuilt || 'N/A'}

\n
\n
\n

Age Difference

\n

\n {properties.propertyOne.yearBuilt && properties.propertyTwo.yearBuilt \n ? Math.abs(properties.propertyOne.yearBuilt - properties.propertyTwo.yearBuilt)\n : 'N/A'} years\n

\n
\n
\n

Year Built

\n

{properties.propertyTwo.yearBuilt || 'N/A'}

\n
\n
\n
\n
\n\n {/* Investment Metrics */}\n
\n

Investment Metrics

\n
\n
\n
\n

Price/sqft

\n

${calculateMetrics(properties.propertyOne)?.pricePerSqft?.toFixed(0)}

\n
\n
\n

Difference

\n

\n ${Math.abs(\n calculateMetrics(properties.propertyOne)?.pricePerSqft - \n calculateMetrics(properties.propertyTwo)?.pricePerSqft\n )?.toFixed(0)}\n

\n
\n
\n

Price/sqft

\n

${calculateMetrics(properties.propertyTwo)?.pricePerSqft?.toFixed(0)}

\n
\n
\n\n
\n
\n

Est. Monthly Rent

\n

${calculateMetrics(properties.propertyOne)?.estimatedRent?.toFixed(0)}

\n
\n
\n

Difference

\n

\n ${Math.abs(\n calculateMetrics(properties.propertyOne)?.estimatedRent - \n calculateMetrics(properties.propertyTwo)?.estimatedRent\n )?.toFixed(0)}\n

\n
\n
\n

Est. Monthly Rent

\n

${calculateMetrics(properties.propertyTwo)?.estimatedRent?.toFixed(0)}

\n
\n
\n\n
\n
\n

Cap Rate

\n

{calculateMetrics(properties.propertyOne)?.capRate?.toFixed(2)}%

\n
\n
\n

Difference

\n

\n {Math.abs(\n calculateMetrics(properties.propertyOne)?.capRate - \n calculateMetrics(properties.propertyTwo)?.capRate\n )?.toFixed(2)}%\n

\n
\n
\n

Cap Rate

\n

{calculateMetrics(properties.propertyTwo)?.capRate?.toFixed(2)}%

\n
\n
\n
\n
\n
\n\n {/* Operating Costs */}\n
\n

Annual Operating Costs

\n
\n
\n
\n Property Taxes\n ${calculateMetrics(properties.propertyOne)?.yearlyTaxes?.toFixed(0)}\n
\n
\n Insurance\n ${calculateMetrics(properties.propertyOne)?.insuranceCost?.toFixed(0)}\n
\n
\n Maintenance\n ${calculateMetrics(properties.propertyOne)?.maintenanceCost?.toFixed(0)}\n
\n
\n\n
\n
\n Difference\n \n ${Math.abs(\n calculateMetrics(properties.propertyOne)?.yearlyTaxes - \n calculateMetrics(properties.propertyTwo)?.yearlyTaxes\n )?.toFixed(0)}\n \n
\n
\n Difference\n \n ${Math.abs(\n calculateMetrics(properties.propertyOne)?.insuranceCost - \n calculateMetrics(properties.propertyTwo)?.insuranceCost\n )?.toFixed(0)}\n \n
\n
\n Difference\n \n ${Math.abs(\n calculateMetrics(properties.propertyOne)?.maintenanceCost - \n calculateMetrics(properties.propertyTwo)?.maintenanceCost\n )?.toFixed(0)}\n \n
\n
\n\n
\n
\n Property Taxes\n ${calculateMetrics(properties.propertyTwo)?.yearlyTaxes?.toFixed(0)}\n
\n
\n Insurance\n ${calculateMetrics(properties.propertyTwo)?.insuranceCost?.toFixed(0)}\n
\n
\n Maintenance\n ${calculateMetrics(properties.propertyTwo)?.maintenanceCost?.toFixed(0)}\n
\n
\n
\n
\n\n {/* AI Analysis */}\n {aiAnalysis && (\n \n

AI Investment Analysis

\n
\n {aiAnalysis}\n
\n \n )}\n\n {/* Action Buttons */}\n
\n \n \n \n
\n \n )}\n
\n
\n );\n}\n\nexport default PropertyComparison;\n","\nimport React, { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport {\n Users,\n MessageSquare,\n Share2,\n Search,\n HelpCircle,\n Star,\n ThumbsUp,\n} from \"lucide-react\";\n\nfunction CommunityHub() {\n const [activeTab, setActiveTab] = useState(\"discussions\");\n const { toast } = useToast();\n\n const mockDiscussions = [\n {\n id: 1,\n title: \"Best areas for rental properties in 2024\",\n author: \"John Smith\",\n replies: 23,\n likes: 45,\n tags: [\"Investment\", \"Market Trends\"],\n timeAgo: \"2h ago\",\n },\n {\n id: 2,\n title: \"How to calculate ROI accurately\",\n author: \"Sarah Johnson\",\n replies: 15,\n likes: 32,\n tags: [\"ROI\", \"Calculations\"],\n timeAgo: \"5h ago\",\n },\n // Add more mock discussions\n ];\n\n const mockExperts = [\n {\n id: 1,\n name: \"Dr. Michael Brown\",\n specialty: \"Real Estate Economics\",\n rating: 4.9,\n reviews: 156,\n available: true,\n },\n {\n id: 2,\n name: \"Lisa Anderson\",\n specialty: \"Investment Strategy\",\n rating: 4.8,\n reviews: 123,\n available: false,\n },\n // Add more mock experts\n ];\n\n return (\n
\n {/* Header */}\n
\n

\n Community Hub\n

\n \n
\n\n {/* Navigation Tabs */}\n
\n {[\n { id: \"discussions\", label: \"Discussions\", icon: MessageSquare },\n { id: \"experts\", label: \"Expert Q&A\", icon: HelpCircle },\n { id: \"network\", label: \"Network\", icon: Users },\n ].map((tab) => (\n setActiveTab(tab.id)}\n className=\"flex items-center space-x-2\"\n >\n \n {tab.label}\n \n ))}\n
\n\n {/* Search and Filters */}\n
\n
\n \n \n
\n \n
\n\n {/* Content Sections */}\n {activeTab === \"discussions\" && (\n
\n {mockDiscussions.map((discussion) => (\n \n
\n
\n

\n {discussion.title}\n

\n
\n {discussion.author}\n {discussion.timeAgo}\n {discussion.replies} replies\n {discussion.likes} likes\n
\n
\n \n
\n
\n {discussion.tags.map((tag) => (\n \n {tag}\n \n ))}\n
\n \n ))}\n
\n )}\n\n {activeTab === \"experts\" && (\n
\n {mockExperts.map((expert) => (\n \n
\n
\n \n
\n
\n

\n {expert.name}\n

\n

{expert.specialty}

\n
\n
\n
\n
\n \n {expert.rating}\n \n ({expert.reviews} reviews)\n \n
\n \n {expert.available ? \"Ask Question\" : \"Schedule Call\"}\n \n
\n \n ))}\n
\n )}\n\n {activeTab === \"network\" && (\n
\n
\n

Your Network

\n {/* Network content */}\n
\n
\n

Suggested Connections

\n {/* Suggestions */}\n
\n
\n )}\n
\n );\n}\n\nexport default CommunityHub;\n","\nimport React, { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport {\n HelpCircle,\n MessageSquare,\n Star,\n ThumbsUp,\n Clock,\n Tag,\n} from \"lucide-react\";\n\nfunction ExpertQA() {\n const [activeCategory, setActiveCategory] = useState(\"all\");\n const { toast } = useToast();\n\n const categories = [\n { id: \"all\", label: \"All Questions\" },\n { id: \"investment\", label: \"Investment Strategy\" },\n { id: \"legal\", label: \"Legal & Tax\" },\n { id: \"market\", label: \"Market Analysis\" },\n { id: \"financing\", label: \"Financing\" },\n ];\n\n return (\n
\n {/* Header */}\n
\n

\n Expert Q&A\n

\n \n
\n\n {/* Categories */}\n
\n {categories.map((category) => (\n setActiveCategory(category.id)}\n className=\"whitespace-nowrap\"\n >\n {category.label}\n \n ))}\n
\n\n {/* Search */}\n
\n \n
\n\n {/* Questions List */}\n
\n {/* Add questions list */}\n
\n
\n );\n}\n\nexport default ExpertQA;\n","\nimport React, { useState } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport {\n MessageSquare,\n Send,\n Phone,\n Video,\n MoreHorizontal,\n Image as ImageIcon,\n Paperclip,\n Smile,\n} from \"lucide-react\";\n\nfunction DirectMessaging() {\n const [selectedChat, setSelectedChat] = useState(null);\n const [message, setMessage] = useState(\"\");\n\n const mockChats = [\n {\n id: 1,\n name: \"John Smith\",\n lastMessage: \"Thanks for the property analysis!\",\n time: \"2m ago\",\n unread: 2,\n },\n {\n id: 2,\n name: \"Sarah Johnson\",\n lastMessage: \"Let's discuss the investment opportunity\",\n time: \"1h ago\",\n unread: 0,\n },\n // Add more mock chats\n ];\n\n const mockMessages = [\n {\n id: 1,\n sender: \"John Smith\",\n content: \"Hi, I saw your analysis of the downtown property\",\n time: \"10:30 AM\",\n isSender: false,\n },\n {\n id: 2,\n sender: \"You\",\n content: \"Yes, it's showing great potential for rental income\",\n time: \"10:32 AM\",\n isSender: true,\n },\n // Add more mock messages\n ];\n\n const handleSendMessage = () => {\n if (!message.trim()) return;\n // Add message sending logic here\n setMessage(\"\");\n };\n\n return (\n
\n {/* Chat List */}\n
\n
\n

Messages

\n \n
\n {mockChats.map((chat) => (\n setSelectedChat(chat.id)}\n >\n
\n
\n \n {chat.name[0]}\n \n
\n
\n
\n {chat.name}\n {chat.time}\n
\n

\n {chat.lastMessage}\n

\n
\n {chat.unread > 0 && (\n
\n {chat.unread}\n
\n )}\n
\n \n ))}\n
\n
\n
\n\n {/* Chat Area */}\n
\n {selectedChat ? (\n <>\n {/* Chat Header */}\n
\n
\n
\n
\n J\n
\n
\n

John Smith

\n Online\n
\n
\n
\n \n \n \n
\n
\n
\n\n {/* Messages */}\n
\n {mockMessages.map((msg) => (\n \n \n

{msg.content}

\n \n {msg.time}\n \n
\n
\n ))}\n
\n\n {/* Message Input */}\n
\n
\n \n \n setMessage(e.target.value)}\n placeholder=\"Type a message...\"\n className=\"flex-1\"\n onKeyPress={(e) => e.key === \"Enter\" && handleSendMessage()}\n />\n \n \n
\n
\n \n ) : (\n
\n
\n \n

No Chat Selected

\n

\n Select a conversation to start messaging\n

\n
\n
\n )}\n \n \n );\n}\n\nexport default DirectMessaging;\n","\nimport React, { useState } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { useNavigate } from \"react-router-dom\";\nimport { Button } from \"@/components/ui/button\";\nimport { Input } from \"@/components/ui/input\";\nimport { Label } from \"@/components/ui/label\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { useAuth } from \"../contexts/AuthContext\";\nimport {\n ArrowLeft,\n User,\n Settings,\n Bell,\n Shield,\n CreditCard,\n Mail,\n Moon,\n Sun,\n Globe,\n LogOut,\n CheckCircle,\n Calendar,\n RefreshCw,\n} from \"lucide-react\";\n\nfunction SettingsPage() {\n const navigate = useNavigate();\n const { user, logout } = useAuth();\n const { toast } = useToast();\n const [activeTab, setActiveTab] = useState(\"account\");\n const [isDarkMode, setIsDarkMode] = useState(false);\n\n const handleLogout = async () => {\n try {\n await logout();\n toast({\n title: \"Logged out\",\n description: \"You have been successfully logged out.\",\n });\n navigate(\"/\");\n } catch (error) {\n toast({\n title: \"Error\",\n description: \"Failed to log out. Please try again.\",\n variant: \"destructive\",\n });\n }\n };\n\n const tabs = [\n {\n id: \"account\",\n label: \"Account\",\n icon: User,\n },\n {\n id: \"subscription\",\n label: \"Subscription\",\n icon: CreditCard,\n },\n {\n id: \"notifications\",\n label: \"Notifications\",\n icon: Bell,\n },\n {\n id: \"security\",\n label: \"Security\",\n icon: Shield,\n },\n ];\n\n const renderSubscriptionContent = () => (\n
\n {/* Current Plan */}\n
\n
\n

Current Plan

\n Pro\n
\n
\n
\n \n Active Subscription\n
\n
\n \n Renews on December 31, 2024\n
\n
\n
\n\n {/* Plan Features */}\n
\n

Pro Plan Features

\n
\n
\n \n Unlimited Property Analysis\n
\n
\n \n Advanced Analytics\n
\n
\n \n Portfolio Tracking\n
\n
\n \n Market Research Tools\n
\n
\n \n Priority Support\n
\n
\n
\n\n {/* Payment History */}\n
\n

Payment History

\n
\n
\n
\n

Pro Plan - Monthly

\n

Dec 1, 2023

\n
\n $79.00\n
\n
\n
\n

Pro Plan - Monthly

\n

Nov 1, 2023

\n
\n $79.00\n
\n
\n
\n\n {/* Billing Actions */}\n
\n \n \n
\n
\n );\n\n return (\n
\n
\n
\n navigate(-1)}\n className=\"mr-4\"\n >\n \n Back\n \n

\n Settings\n

\n
\n\n
\n {/* Sidebar */}\n \n {tabs.map((tab) => {\n const Icon = tab.icon;\n return (\n setActiveTab(tab.id)}\n className={`w-full flex items-center space-x-2 px-4 py-2 rounded-lg transition-colors ${\n activeTab === tab.id\n ? \"bg-blue-100 dark:bg-blue-900 text-blue-600 dark:text-blue-300\"\n : \"hover:bg-gray-100 dark:hover:bg-gray-800\"\n }`}\n >\n \n {tab.label}\n \n );\n })}\n \n\n {/* Main Content */}\n \n {activeTab === \"subscription\" ? (\n renderSubscriptionContent()\n ) : (\n // Other tabs content remains the same\n
\n

{activeTab.charAt(0).toUpperCase() + activeTab.slice(1)} Settings

\n {/* Existing settings content */}\n
\n )}\n \n
\n
\n
\n );\n}\n\nexport default SettingsPage;\n","\n// Email service for frontend\nexport const EmailService = {\n async sendEmail(type, data) {\n try {\n const response = await fetch('/api/email', {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({\n type,\n data\n }),\n });\n\n if (!response.ok) {\n throw new Error('Failed to send email');\n }\n\n return await response.json();\n } catch (error) {\n console.error('Email service error:', error);\n throw error;\n }\n },\n\n async sendWelcomeEmail(user) {\n return this.sendEmail('welcome', { user });\n },\n\n async sendPaymentConfirmation(user, subscription) {\n return this.sendEmail('payment', { user, subscription });\n },\n\n async sendAnalysisReport(user, analysis) {\n return this.sendEmail('analysis', { user, analysis });\n },\n\n async sendMarketUpdate(user, marketData) {\n return this.sendEmail('market', { user, marketData });\n }\n};\n","\nimport React, { useEffect } from \"react\";\nimport { motion } from \"framer-motion\";\nimport { useNavigate, useLocation } from \"react-router-dom\";\nimport { Button } from \"@/components/ui/button\";\nimport { CheckCircle } from \"lucide-react\";\nimport { useAuth } from \"../contexts/AuthContext\";\nimport { useToast } from \"@/components/ui/use-toast\";\nimport { EmailService } from \"../lib/email\";\n\nfunction PaymentSuccess() {\n const navigate = useNavigate();\n const location = useLocation();\n const { user } = useAuth();\n const { toast } = useToast();\n\n useEffect(() => {\n const queryParams = new URLSearchParams(location.search);\n const sessionId = queryParams.get('session_id');\n\n if (sessionId) {\n verifyPayment(sessionId);\n }\n }, [location]);\n\n const verifyPayment = async (sessionId) => {\n try {\n const response = await fetch(`/api/verify-payment/${sessionId}`);\n const data = await response.json();\n\n if (data.success) {\n // Send confirmation email\n await EmailService.sendPaymentConfirmation(user, data.subscription);\n\n toast({\n title: \"Payment Successful\",\n description: \"Your subscription has been activated!\",\n });\n }\n } catch (error) {\n console.error('Payment verification error:', error);\n toast({\n title: \"Verification Error\",\n description: \"There was an error verifying your payment.\",\n variant: \"destructive\",\n });\n }\n };\n\n return (\n
\n
\n \n
\n \n \n \n\n

\n Payment Successful!\n

\n\n

\n Thank you for your subscription. Your account has been upgraded.\n

\n\n
\n navigate(\"/dashboard\")}\n className=\"w-full\"\n >\n Go to Dashboard\n \n\n navigate(\"/analyze\")}\n className=\"w-full\"\n >\n Start Analysis\n \n
\n
\n \n
\n
\n );\n}\n\nexport default PaymentSuccess;\n","\nimport React from 'react';\nimport { Navigate } from 'react-router-dom';\nimport { useAuth } from '../contexts/AuthContext';\nimport LoadingSpinner from './LoadingSpinner';\n\nfunction ProtectedRoute({ children, requiresPro = false }) {\n const { user, loading } = useAuth();\n\n if (loading) {\n return ;\n }\n\n if (!user) {\n return ;\n }\n\n // Check for pro access if required\n if (requiresPro && (!user.subscription || user.subscription.plan !== 'pro')) {\n return ;\n }\n\n return children;\n}\n\nexport default ProtectedRoute;\n","\nimport React from \"react\";\nimport { BrowserRouter as Router, Routes, Route } from \"react-router-dom\";\nimport { AuthProvider } from \"./contexts/AuthContext\";\nimport { PropertyProvider } from \"./contexts/PropertyContext\";\nimport { CommunityProvider } from \"./contexts/CommunityContext\";\nimport { UserProvider } from \"./contexts/UserContext\";\nimport { Toaster } from \"./components/ui/toaster\";\nimport Navbar from \"./components/Navbar\";\nimport LandingPage from \"./pages/LandingPage\";\nimport AnalysisTool from \"./pages/AnalysisTool\";\nimport Dashboard from \"./components/dashboard/Dashboard\";\nimport PropertyAnalysis from \"./components/PropertyAnalysis\";\nimport MarketAnalysis from \"./components/market/MarketAnalysis\";\nimport PropertyComparison from \"./components/comparison/PropertyComparison\";\nimport CommunityHub from \"./components/community/CommunityHub\";\nimport ExpertQA from \"./components/community/ExpertQA\";\nimport DirectMessaging from \"./components/community/DirectMessaging\";\nimport SettingsPage from \"./pages/SettingsPage\";\nimport PaymentSuccess from \"./pages/PaymentSuccess\";\nimport ProtectedRoute from \"./components/ProtectedRoute\";\n\nfunction App() {\n return (\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 } />\n \n \n \n } />\n \n \n \n } />\n } />\n \n
\n \n
\n
\n
\n
\n
\n
\n );\n}\n\nexport default App;\n","\nimport React from \"react\";\nimport ReactDOM from \"react-dom/client\";\nimport App from \"./App\";\nimport \"./index.css\";\n\nReactDOM.createRoot(document.getElementById(\"root\")).render(\n \n \n \n);\n"],"file":"assets/index-0944a380.js"}